Django学习之后台管理系统

【创建超级用户】

pycharm  菜单栏 >>> Tools >>> Run manage.py Task >>>

manage.py@MxOnline> createsuperuser    (创建超级用户)

username    用户名
email           邮箱
password    密码
password    确认密码

另外还需要对settings.py文件进行设置

LANGUAGE_CODE = 'en-us' # 默认英文

TIME_ZONE = 'UTC'     # 默认时区

USE_I18N = True

USE_L10N = True

USE_TZ = True        # 默认使用UTC国际时间,所以我们要改为False来使用本地服务器时间

变更后:

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

【加入注册用户】

apps/users/admin.py (用来注册后台管理系统的)

# _*_ encoding:utf-8 _*_

from django.contrib import admin

from .models import UserProfile

# Register your models here.


class UserProfileAdmin(admin.ModelAdmin):  # 继承admin的ModelAdmin方法
    pass


admin.site.register(UserProfile,UserProfileAdmin)   
# 用admin.site.register关联注册UserProfile,关联的类为UserProfileAdmin
# 这样后台就会多出一个用户信息栏目,并且可以编辑用户了

先导入UserProfile类,然后新建一个继承admin.ModelAdmin的类,再把操作关联起来。

后台就会显示了USERS目录

我们添加用户时显示错误(因为我们数据表的长度设置是5,但是默认值是6;所以需要去修改一下数据表)

将users的models.py把性别的长度5改成6之后

pycharm  菜单栏 >>> Tools >>> Run manage.py Task >>> 

manage.py@MxOnline>  makemigrations users [appname]  (检测表)

manage.py@MxOnline>  migrate [appname]

(可能出现的错误:ValueError:too many values to unpack)

这可能是因为将app迁移到apps文件夹后自动在某些路径前加入了 apps. 但是我们已经在settings.py文件中添加过路径了,解决方法:查找migrations下的文件中含有apps.前缀的,将apps.删除即可(apps是我建立的文件夹名称)

添加用户时可能会出现以下错误:

IntegrityError at /admin/users/userprofile/add/

(1452, 'Cannot add or update a child row: a foreign key constraint fails (`mxonline`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')

外键约束。大概意思是:插入数据的时候,外键的值不是对应的主键的值。但是这时候表里是没有数据的,所以可能有主键值;插入数据时它的根节点可能不存在,所以插入失败。建议查询“外键”相关知识。两张表不是并列关系,而是父子关系。

配置成下面这种即可使用:

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

    }
}

===============================================================================================

【后台管理之Xadmin】

1、先进入CMD虚拟环境命令行pip安装,以便获取到依赖包

2、将 crispy_forms 和 xadmin 注册到app当中(settings.py文件中)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'courses',
    'organization',
    'operation',
    'crispy_forms',
    'xadmin',
]

3、将urls配置到admin的改为xadmin指向

import xadmin

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
]

4、注销原装admin注册方式(users/admin.py),删除刚才的class和导入,然后重启

# _*_ encoding:utf-8 _*_

from django.contrib import admin


# Register your models here.


可能出现的错误:

ProgrammingError at /xadmin/
(1146, "Table 'mxonline.xadmin_usersettings' doesn't exist")
Request Method:	GET
Request URL:	http://192.168.88.129:8000/xadmin/
Django Version:	1.9.8
Exception Type:	ProgrammingError
Exception Value:	
(1146, "Table 'mxonline.xadmin_usersettings' doesn't exist")
Exception Location:	C:\Users\Administrator\Envs\mxonline\lib\site-packages\MySQLdb\connections.py in defaulterrorhandler, line 36
Python Executable:	C:\Users\Administrator\Envs\mxonline\Scripts\python.exe
Python Version:	2.7.15
Python Path:	
['C:\\Users\\Administrator\\PycharmProjects\\MxOnline\\apps',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline\\apps',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Users\\Administrator\\Envs\\mxonline\\DLLs',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\plat-win',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\lib-tk',
 'C:\\Users\\Administrator\\Envs\\mxonline\\Scripts',
 'c:\\python27\\Lib',
 'c:\\python27\\DLLs',
 'c:\\python27\\Lib\\lib-tk',
 'C:\\Users\\Administrator\\Envs\\mxonline',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages']
Server time:	星期二, 17 七月 2018 12:48:55 +0800

这是因为我们还没有把xadmin的表生成和创建到mysql当中。

pycharm  菜单栏 >>> Tools >>> Run manage.py Task >>> 

manage.py@MxOnline>  makemigrations [appname]  (生成表)

manage.py@MxOnline>  migrate [appname] (写入mysql)

这样既可完成。

通过以上操作就已经完成了,但是如果我们想要体验最新版的话就直接到Github上下载最新版,然后解压将admin文件夹复制到

【源码方式安装xadmin】

完成以上步骤(因为需要依赖库),再来拷贝安装

1、将下载解压后的admin文件夹拷贝到项目根目录

2、新建Python Package命名为extra_apps(表示第三方库app)

3、IDE中Sources Root文件夹让extra_apps为根目录,并且在settings.py文件中加入app路径

import os
import sys

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
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'))

4、卸载虚拟环境中的xadmin  (pip uninstall xadmin)

5、重新运行(可能会遇到以下错误)

Unhandled exception in thread started by <function wrapper at 0x0000000003649C18>
Traceback (most recent call last):
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\utils\autoreload.py", line 249, in raise_last_exception
    six.reraise(*_exception)
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\apps\registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "C:\Users\Administrator\Envs\mxonline\lib\site-packages\django\apps\config.py", line 90, in create
    module = import_module(entry)
  File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Users\Administrator\PycharmProjects\MxOnline\extra_apps\xadmin\__init__.py", line 4, in <module>
    from xadmin.sites import AdminSite, site
  File "C:\Users\Administrator\PycharmProjects\MxOnline\extra_apps\xadmin\sites.py", line 3, in <module>
    from future.utils import iteritems
ImportError: No module named future.utils

5-1、解决方法:

这是因为没安装future,因此,执行一下如下命令安装相关依赖包即可:

pip install future six httplib2

pip install django-import-export

===============================================================================================

猜你喜欢

转载自blog.csdn.net/qq_40134903/article/details/81074300