yangyongbo

 

Django后台管理系统:                                                                                                                   

  特点:
    权限管理,少前端样式,快速开发
    

Django默认提供我们一个admin管理系统,但这里我们使用功能更为强大的Django插件xadmin

  •   安装:                        
  1. pip安装:pip install xadmin (这样会帮我们顺便安装好依赖crispy_forms)
  2. 2.源码安装(这里使用源码安装)和前期配置(settings.urls,还有注册xadmin自带的表,创建超级用户):
    1.   下载源码后解压,把xadmin文件夹拖到工作目录extra_apps(专门放外部的app,xadmin相当于一个app),但这样要另外安装依赖crispy_forms。(推荐先pip再源码安装);
    2. 把extra_apps设为source root,同时在setting设为根目录

        

     4.在setting中修改语言为中文,时区为上海,使用本地时间(不然数据库存储时会使用国际时间)

                                                          

    5.在setting中注册\'xadmin\',和依赖\'crispy_forms\'(xadmin相当于一个app):

                                         

    6.在urls中把默认的admin改成xadmin

                                                      

    7.在控制台创建一个超级用户:createsuperuser

如果出现:Superuser creation skipped due to not running in a TTY. You can run manage.py createsuperuser in your project to create one manually.这个错误的

解决方法就是在cmd中进入manage.py目录使用命令行 Python2 manage.py createsuperuser 这样就可以成功了

    8..makemigrations,migrate应用下xadmin 的表

      

  1 # -*- coding utf-8 -*-
  2 # coding=utf-8
  3 
  4 """
  5 Django settings for DjangoStart2 project.
  6 
  7 Generated by \'django-admin startproject\' using Django 1.9.8.
  8 
  9 For more information on this file, see
 10 https://docs.djangoproject.com/en/1.9/topics/settings/
 11 
 12 For the full list of settings and their values, see
 13 https://docs.djangoproject.com/en/1.9/ref/settings/
 14 """
 15 
 16 import os
 17 import sys
 18 
 19 # 当前根目录
 20 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 21 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 22 sys.path.insert(0,os.path.join(BASE_DIR,\'apps\'))  # 把apps添加到根目录
 23 sys.path.insert(0,os.path.join(BASE_DIR,\'extra_apps\'))  # 把apps添加到根目录
 24 
 25 
 26 # Quick-start development settings - unsuitable for production
 27 # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
 28 
 29 # SECURITY WARNING: keep the secret key used in production secret!
 30 SECRET_KEY = \'xo8n5^ll91j1(iqbj+-w@41^#%cp!y_3i*k_1!s*8u*t9l@=fc\'
 31 
 32 # SECURITY WARNING: don\'t run with debug turned on in production!
 33 DEBUG = True
 34 
 35 ALLOWED_HOSTS = []
 36 
 37 
 38 # Application definition
 39 
 40 INSTALLED_APPS = [
 41     \'django.contrib.admin\',
 42     \'django.contrib.auth\',
 43     \'django.contrib.contenttypes\',
 44     \'django.contrib.sessions\',
 45     \'django.contrib.messages\',
 46     \'django.contrib.staticfiles\',
 47     \'users\',
 48     \'courses\',
 49     \'organization\',
 50     \'operation\',
 51     \'xadmin\',
 52     \'crispy_forms\'
 53 ]
 54 AUTH_USER_MODEL = "users.UserProfile"
 55 
 56 MIDDLEWARE_CLASSES = [
 57     \'django.middleware.security.SecurityMiddleware\',
 58     \'django.contrib.sessions.middleware.SessionMiddleware\',
 59     \'django.middleware.common.CommonMiddleware\',
 60     \'django.middleware.csrf.CsrfViewMiddleware\',
 61     \'django.contrib.auth.middleware.AuthenticationMiddleware\',
 62     \'django.contrib.auth.middleware.SessionAuthenticationMiddleware\',
 63     \'django.contrib.messages.middleware.MessageMiddleware\',
 64     \'django.middleware.clickjacking.XFrameOptionsMiddleware\',
 65 ]
 66 
 67 ROOT_URLCONF = \'DjangoStart2.urls\'
 68 
 69 TEMPLATES = [
 70     {
 71         \'BACKEND\': \'django.template.backends.django.DjangoTemplates\',
 72         \'DIRS\': [os.path.join(BASE_DIR, \'templates\')]
 73         ,
 74         \'APP_DIRS\': True,
 75         \'OPTIONS\': {
 76             \'context_processors\': [
 77                 \'django.template.context_processors.debug\',
 78                 \'django.template.context_processors.request\',
 79                 \'django.contrib.auth.context_processors.auth\',
 80                 \'django.contrib.messages.context_processors.messages\',
 81             ],
 82         },
 83     },
 84 ]
 85 
 86 WSGI_APPLICATION = \'DjangoStart2.wsgi.application\'
 87 
 88 
 89 # Database
 90 # https://docs.djangoproject.com/en/1.9/ref/settings/#databases
 91 
 92 DATABASES = {
 93      \'default\': {
 94         \'ENGINE\': \'django.db.backends.mysql\',
 95         \'NAME\':"educationDjango",
 96         \'USER\':"root",
 97         \'PASSWORD\':"yy123456",
 98         \'HOST\':"127.0.0.1",
 99 
100     }
101 }
102 
103 
104 # Password validation
105 # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
106 
107 AUTH_PASSWORD_VALIDATORS = [
108     {
109         \'NAME\': \'django.contrib.auth.password_validation.UserAttributeSimilarityValidator\',
110     },
111     {
112         \'NAME\': \'django.contrib.auth.password_validation.MinimumLengthValidator\',
113     },
114     {
115         \'NAME\': \'django.contrib.auth.password_validation.CommonPasswordValidator\',
116     },
117     {
118         \'NAME\': \'django.contrib.auth.password_validation.NumericPasswordValidator\',
119     },
120 ]
121 
122 
123 # Internationalization
124 # https://docs.djangoproject.com/en/1.9/topics/i18n/
125 
126 LANGUAGE_CODE = \'zh_hans\'
127 
128 TIME_ZONE = \'Asia/Shanghai\'
129 
130 USE_I18N = True
131 
132 USE_L10N = True
133 
134 USE_TZ = False
135 
136 
137 # Static files (CSS, JavaScript, Images)
138 # https://docs.djangoproject.com/en/1.9/howto/static-files/
139 
140 STATIC_URL = \'/static/\'
141 STATIC_ROOT = os.path.join(BASE_DIR, \'static\')
142 # STATICFILES_DIRS ,指定额外的静态文件存储位置。注意设置的值是一个元组数据类型
143 # STATICFILES_DIRS = [
144 #     os.path.join(BASE_DIR,\'static\')
145 # ]
配置完成后的settings.py
 1 """DjangoStart2 URL Configuration
 2 
 3 The `urlpatterns` list routes URLs to views. For more information please see:
 4     https://docs.djangoproject.com/en/1.9/topics/http/urls/
 5 Examples:
 6 Function views
 7     1. Add an import:  from my_app import views
 8     2. Add a URL to urlpatterns:  url(r\'^$\', views.home, name=\'home\')
 9 Class-based views
10     1. Add an import:  from other_app.views import Home
11     2. Add a URL to urlpatterns:  url(r\'^$\', Home.as_view(), name=\'home\')
12 Including another URLconf
13     1. Import the include() function: from django.conf.urls import url, include
14     2. Add a URL to urlpatterns:  url(r\'^blog/\', include(\'blog.urls\'))
15 """
16 from django.conf.urls import url
17 from django.contrib import admin
18 import xadmin
19 urlpatterns = [
20     url(r\'^xadmin/\', xadmin.site.urls),
21 ]
配置完后的urls.py

 

  •  把我们写的数据表注册到xadmin中(user表默认注册进去了)   

    1.在每个app下新建adminx.py(xadmin会默认搜索每个app下的adminx.py文件)
    2.在adminx中新建个管理类(继承object),命名方式为:需要注册的表名加Admin
    3.xadmin.site.register(表名,对应的管理类)
    扩展:
      4.可以在对应的models上重载__unicode__方法,自定义显示形式
      # 重载__unicode__方法,使在页面显示时用111(2@qq.com)的形式显示
          def __unicode__(self):
              return \'{0}({1})\'.format(self.code,self.email)

        
    5.自定义显示列,过滤器,搜索框(时间不要添加进去,时间搜索不好做,但可以把时间放进过滤器里)
在对应的adminx中的对应管理类中。

 1 # -*- coding utf-8 -*-
 2 # coding=utf-8
 3 import xadmin
 4 from .models import EmailVerityRecord
 5 
 6 class EmailVerityRecordAdmin(object):
 7     # 自定义显示列
 8     list_display = [\'code\',\'email\',\'send_type\',\'send_time\']
 9     # 搜索框(时间不要添加进去,时间搜索不好做,当可以把时间放进过滤器里)
10     search_fields = [\'code\',\'email\',\'send_type\']
11     # 过滤器
12     list_filter = [\'code\',\'email\',\'send_type\',\'send_time\']
13 xadmin.site.register(EmailVerityRecord,EmailVerityRecordAdmin)
user下的adminx.py

 

分类:

技术点:

相关文章: