=======================主settings文件=========================

# 配置时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_URL = '/static/'
# TEMPLATE_DIRS = (os.path.join(BASE_DIR,  'templates'),)
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

# 配置media路径,即png资源
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

# 配置EMAIL客户端
EMAIL_HOST = 'smtp.163.com'
EMAIL_HOST_USER = 'x_jweI@163.com'
EMAIL_HOST_PASSWORD = 'XX13663429459'
EMAIL_PORT = 25
EMAIL_USE_TLS = True
EMAIL_FROM = 'x_jwei@163.com'

# 配置TEMPLATES
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                # 处理媒体
                # 旧版本:'django.core.context_processors.media',
                'django.template.context_processors.media',
            ],
        },
    },
]

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 自定义的models
    'users',
    'courses',
    'operation',
    'organization',
    # xadmin需要
    'xadmin',
    'crispy_forms',
    # 验证码需要
    'captcha',
    'pure_pagination',

]

# 自定义的一些包
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
sys.path.insert(0, os.path.join(BASE_DIR, "extra_apps"))

# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mxonline',
        'USER': 'root',
        'PASSWORD': 'redhat',
        'HOST': '127.0.0.1',
        # 'OPTIONS':{"init_command" : "SET foreign_key_checks = 1;",}
    }
}

=======================主urls文件=========================

from django.conf.urls import url, include
from django.contrib import admin
import xadmin
from MxOnline.settings import MEDIA_ROOT
from django.views.generic import TemplateView
from django.views.static import serve

from users.views import LoginView, RegisterView, ActiveUserView, ForgetPwdView, ResetView , ModifyPwdView
from organization.views import OrgView

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
    url(r'^login/$', LoginView.as_view(), name="login"),
    url(r'^register/$', RegisterView.as_view(), name="register"),
    url(r'^captcha/', include('captcha.urls')),
    url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name="user_active"),
    url(r'^reset/(?P<active_code>.*)/$', ResetView.as_view(), name="reset_pwd"),
    url(r'^forget/$', ForgetPwdView.as_view(), name="forget_pwd"),
    url(r'^modify/$', ModifyPwdView.as_view(), name="modify_pwd"),

    url(r'^course/', include('courses.urls', namespace='course')),

    url(r'^org/', include('organization.urls', namespace='org')),

    # 配置上传图片文件的路径
    url(r'^media/(?P<path>.*)/$', serve, {"document_root":MEDIA_ROOT}),
]

=======================配置Xadmin文件=========================
完成下面步骤后执行migrate
1, settings中INSTALLED_APPS 加载 ['xadmin','crispy_forms'],
2, __init__添加default_app_config = "operation.apps.OperationConfig"
3, apps.py添加
#coding=utf-8
from __future__ import unicode_literals

from django.apps import AppConfig

class OperationConfig(AppConfig):
    name = 'operation'
    verbose_name = u"用户操作"

4, 编辑app下的xadmin.py文件

import xadmin
from xadmin import views

from .models import EmailVerifyRecord
from .models import Banner

class BaseSetting(object):
    enable_themes = True
    use_bootswacth = True

class GlobalSettings(object):
    site_title = "后台管理系统"
    site_footer = "在线网"
    menu_style = "accordion"

class EmailVerifyRecordAdmin(object):
    list_display = ['code', 'email', 'send_type', 'send_time']
    search_fields = ['code', 'email', 'send_type']
    list_export = ['xls', 'xml', 'json']
    list_filter = ['code', 'email', 'send_type', 'send_time']

class BannerAdmin(object):
    list_display = ['title', 'image', 'url', 'index', 'add_time']
    search_fields = ['title', 'image', 'url', 'index']
    list_export = ['xls', 'xml', 'json']
    list_filter = ['title', 'image', 'url', 'index', 'add_time']

xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
xadmin.site.register(Banner, BannerAdmin)
xadmin.site.register(views.BaseAdminView, BaseSetting)
xadmin.site.register(views.CommAdminView, GlobalSettings)

=======================配置Models:普通=========================
# coding=utf-8
from __future__ import unicode_literals

from datetime import datetime
from django.db import models
from organization.models import CourseOrg, Teacher

# Create your models here.

class Course(models.Model):
    course_org = models.ForeignKey(CourseOrg, verbose_name=u"课程机构",null=True, blank=True)
    name = models.CharField(max_length=50, verbose_name=u"课程名")
    desc = models.CharField(max_length=300, verbose_name=u"课程描述")
    detail = models.TextField(verbose_name=u"课程详情")
    degree = models.CharField(verbose_name=u"难度",choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")),max_length=10)
    learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
    students = models.IntegerField(default=0, verbose_name=u"学习人数")
    fav_nums = models.IntegerField(default=0, verbose_name=u"收藏人数")
    click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
    image = models.ImageField(upload_to="courses/%Y/%m", verbose_name=u"封面图", max_length=100)
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    category = models.CharField(max_length=20, verbose_name="课程类别",default=u"后端开发")
    teacher = models.ForeignKey(Teacher,verbose_name=u"讲师",null=True, blank=True)

    # tag技术
    tag = models.CharField(default="",verbose_name="课程标签",max_length=10)

    class Meta:
        verbose_name = u"课程"
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.name

    def get_zj_nums(self):
        return self.lesson_set.all().count()

    def get_learn_user(self):
        return self.usercourse_set.all()[:5]

    def get_course_lesson(self):
        # 获取课程所有章节
        return self.lesson_set.all()

class Lesson(models.Model):
    course = models.ForeignKey(Course, verbose_name=u"课程")
    name = models.CharField(max_length=100, verbose_name=u"章节名")
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")

    class Meta:
        verbose_name = u"章节"
        verbose_name_plural= verbose_name

    def __unicode__(self):
        return self.name

    def get_lesson_video(self):
        # 获取章节视频
        return  self.video_set.all()

class Video(models.Model):
    lesson = models.ForeignKey(Lesson, verbose_name=u"章节")
    name = models.CharField(max_length=100, verbose_name=u"视频名")
    url = models.CharField(max_length=200, verbose_name=u"访问地址",default="")
    learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")

    class Meta:
        verbose_name = u"视频"
        verbose_name_plural= verbose_name

    def __unicode__(self):
        return self.name

class CourseResource(models.Model):
    course = models.ForeignKey(Course, verbose_name=u"课程")
    name = models.CharField(max_length=100, verbose_name=u"名称")
    download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name=u"资源文件")
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")

    class Meta:
        verbose_name = u"课程资源"
        verbose_name_plural= verbose_name

=======================配置Models:权限=========================
# coding=utf-8
from __future__ import unicode_literals
from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.

class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, verbose_name=u"昵称", default="")
    birthday = models.DateField(verbose_name=u"生日", null=True, blank=True)
    gender = models.CharField(choices=(("male", u"男"), ("female", u"女")), default="", max_length=6)
    address = models.CharField (max_length=100, default=u"")
    mobile = models.CharField(max_length=11, null=True, blank=True)
    image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length=100)

    class Meta:
        verbose_name = u"用户信息"
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.username

class EmailVerifyRecord(models.Model):
    code = models.CharField(max_length=20, verbose_name="验证码")
    email = models.EmailField(max_length=50, verbose_name=u"邮箱")
    send_type = models.CharField(verbose_name=u"验证类型",choices=(("register",u"注册"),("forget",u"忘记密码")),max_length=10)
    send_time = models.DateTimeField(verbose_name=u"发送时间",default=datetime.now)

    class Meta:
        verbose_name = u"邮箱验证码"
        verbose_name_plural = verbose_name

    def __unicode__(self):
            return '{0}({1})'.format(self.email,self.code)

class Banner(models.Model):
    title = models.CharField(max_length=100, verbose_name=u"标题")
    image = models.ImageField(upload_to="banner/%Y/%m", verbose_name=u"轮播图", max_length=100)
    url = models.URLField(max_length=200, verbose_name=u"访问地址")
    index = models.IntegerField(default=100, verbose_name=u"顺序")
    add_time = models.DateTimeField(default=datetime.now)

    class Meta:
        verbose_name = u"轮播图"
        verbose_name_plural = verbose_name

 ===================MEDIA_ROOT的配置=====================
 1,settings配置TEMPLATES

 2,# URLS配置上传图片文件的路径
 from django.conf.urls import url
from django.contrib import admin
import xadmin
from MyLofter.settings import MEDIA_ROOT
from django.views.generic import TemplateView
from django.views.static import serve
from app01.views import IndexView

urlpatterns = [

    # url(r'^admin/', admin.site.urls),
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^$', IndexView.as_view(), name="index"),

# 配置上传图片文件的路径
    url(r'^media/(?P<path>.*)/$', serve, {"document_root":MEDIA_ROOT}),
]

备份地址: 【Django1.9.8项目配置