Q:

Understanding how to create django Models

I followed some examples on the Django website and I understand the idea that Django wants you to separate pieces of the project into 'apps'. 
Each 'app' has its own models. So if I want to create an app that allows users to login and modify some data (add/edit/delete), like a collection of books and collection of authors, I need to create apps for this.
In this case I would have an 'app' books
that contains models.py, with two model classes : Book and Author. The Book class would have as one of its fields author = models.ForeignKey(Author). 
So here are my questions:

If I create a new app can my models in that app contain ForeignKey fields to models that don't reside in the same app?
As I mentioned, I want to have a credentials 'table' that allows users to login. How could this be accomplished? Is it necessary to start a new 'app' like 'users' with a user model?
How does one incorporate MySQL features like 'auto increment', 'non-unique index', and 'triggers' into these modesl or does that have to be done manually or through a MySQL console/manager?

A:

Nothing prevents you from making relationships to models in other apps.  Apps are simply are a way to group code in logical places.  Here is an example of how you might reference one model located in a different app. 
Say this is in a module called myapp, you can refer to other models in other apps with syntax similar to the following.  In this example, there exists a User model inside of an "auth" app.
class MyModel(models.Model):
    ....
    user = models.ForeignKey('auth.User')

Also see: https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey
Django has a great and flexible user system that comes built into it.  When you start a new project, by default, it will create a User table that can be used to create, manage, and authenticate users.  
Here is some related information.  (Actually, the example above shows a relationship to the built-in user table.)  You don't have to start a new app for defining Users unless you want to customize the default behavior of the user framework. 
Django automatically increments primary key fields records.  It creates necessary database objects needed for this.  It also enforces unique fields if desired and allows a bunch of other customizations.  As far as I'm aware, Django does not support database triggers.  I believe that the "Pythonic" way to trigger things may be to do so in your code.  Specifically, Django/Python would manage what actions are take after others.  That's just my thoughts, though.  

