4、Django实战第4天:xadmin快速搭建后台管理系统
Django默认为我们提供了后台管理系统admin, urls.py中配置的第一条就是访问后台管理系统admin的
- urlpatterns = [
- url(r'^admin/', admin.site.urls),
- ]
启动服务,访问127.0.0.1:8000/admin即可访问,访问后台需要验证,但是Django并没有为我们自动创建账号密码,Django提供了命令,让我们自己创建超级用户
现在我们可以用刚刚创建的超级用户登录进去(账号:admin 密码:admin123456)
进入后,发现后台管理系统是英文的,我们可以在settings.py中配置语言和时区等
- # Internationalization
- # https://docs.djangoproject.com/en/1.9/topics/i18n/
- LANGUAGE_CODE = 'zh-hans'
- TIME_ZONE = 'Asia/Shanghai'
- USE_I18N = True
- USE_L10N = True
- USE_TZ = False #设置为False则使用本地时间,否则会使用国际时间
在Django当中,我们可以把所有的数据表都注册进来,然后,我们就可以对这些表进行增删改查 ,打开后台会发现Django已经为我们自动注册了一个组,这个组对应的是auth_group表
本来Django也会有注册user的,因为我们重载了userprofile所以就取消了,现在我们把userprofile重新注册进来,编辑apps.users.admin.py
- from django.contrib import admin
- from .models import UserProfile
- class UserProfileAdmin(admin.ModelAdmin):
- pass
- admin.site.register(UserProfile, UserProfileAdmin)
刷新后台,可以看到‘用户信息’已经注册进来了
上面演示了如何注册userprofile到admin, 要注册其他的表也是一样的,编辑各自apps下面的admin.py注册即可。下面我着重使用另一款后台管理系统xadmin,它是基于Django自带的admin开发的,但是它比admin更加强大
为了方便管理,我们在项目中新建一个python package命名为‘extra_apps’,用来存放第三方源码包
解压zip包,里面有一个目录xadmin,把xadmin复制到extra_apps中
对extrap_apps右键进行Mark Directory as Source root,使得编辑器查找路径
配置settings.py添加搜索路径
- # 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'))
配置settings.py注册apps
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'users',
- 'courses',
- 'organization',
- 'operation',
- 'xadmin',
- 'crispy_forms',
- ]
pip安装一些依赖包
- workon mxonline
- pip install django-crispy-forms
- pip install django-formtools
- pip install httplib2
- pip install future
- pip install six
- pip install django-import-export
编辑urls.py,添加xadmin的路由
- import xadmin
- urlpatterns = [
- #url(r'^admin/', admin.site.urls),
- url(r'^xadmin/', xadmin.site.urls),
- ]
把之前userprofile在admin中的注册去掉
同步xadmin的一些表
启动服务,访问后台127.0.0.1:8000/xadmin, 账号密码还是我们之前创建的超级用户
注册app model到xadmin
users app
在users目录下新建adminx.py,xadmin会自动搜寻该文件来注册model
- import xadmin
- from .models import UserProfile, EmailVerifyRecord, Banner
- class UserProfileAdmin:
- pass
- class EmailVerifyRecordAdmin:
- list_display = ['code', 'email', 'send_type', 'send_time']
- search_fields = ['code', 'email', 'send_type']
- list_filter = ['code', 'email', 'send_type', 'send_time']
- class BannerAdmin:
- list_display = ['title', 'image', 'url', 'index', 'add_time']
- search_fields = ['title', 'image', 'send_type']
- list_filter = ['title', 'image', 'url', 'index', 'add_time']
- # xadmin.site.register(UserProfile, UserProfileAdmin) #因为之前注册过,这里就注释了
- xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
- xadmin.site.register(Banner, BannerAdmin)
courses app
在courses目录下新建adminx.py
- import xadmin
- from .models import Course, Lesson, Video, CourseResource
- class CourseAdmin:
- list_display = ['name', 'desc', 'degree', 'learn_times', 'students', 'fav_nums', 'image', 'click_nums', 'add_time']
- search_fields = ['name', 'desc', 'degree', 'learn_times', 'students', 'fav_nums', 'click_nums']
- list_filter = ['name', 'desc', 'degree', 'students', 'fav_nums', 'image', 'click_nums', 'add_time']
- class LessonAdmin:
- list_display = ['course', 'name', 'add_time']
- search_fields = ['course', 'name']
- list_filter = ['course__name', 'name', 'add_time'] #指定外键的字段name,用两个下划线
- class VideoAdmin:
- list_display = ['lesson', 'name', 'add_time']
- search_fields = ['lesson', 'name']
- list_filter = ['lesson__name', 'name', 'add_time']
- class CourseResourceAdmin:
- list_display = ['course', 'name', 'download', 'add_time']
- search_fields = ['course', 'name', 'download']
- list_filter = ['course__name', 'name', 'add_time']
- xadmin.site.register(Course, CourseAdmin)
- xadmin.site.register(Lesson, LessonAdmin)
- xadmin.site.register(Video, VideoAdmin)
- xadmin.site.register(CourseResource, CourseResourceAdmin)
organization app
在organization目录下新建adminx.py
- import xadmin
- from .models import CityDict, CourseOrg, Teacher
- class CityDictAdmin:
- list_display = ['name', 'desc', 'add_time']
- search_fields = ['name', 'desc']
- list_filter = ['name', 'desc', 'add_time']
- class CourseOrgAdmin:
- list_display = ['name', 'desc', 'click_nums', 'fav_nums', 'image', 'address', 'city', 'add_time']
- search_fields = ['name', 'desc', 'click_nums', 'fav_nums', 'address', 'city']
- list_filter = ['name', 'desc', 'click_nums', 'fav_nums', 'address', 'city__name', 'add_time']
- class TeacherAdmin:
- list_display = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums', 'add_time']
- search_fields = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums']
- list_filter = ['org__name', 'name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums', 'add_time']
- xadmin.site.register(CityDict, CityDictAdmin)
- xadmin.site.register(CourseOrg, CourseOrgAdmin)
- xadmin.site.register(Teacher, TeacherAdmin)
operation app
在operation目录下新建adminx.py
- import xadmin
- from .models import UserAsk, CourseComments, UserFavorite, UserMessage, UserCourse
- class UserAskAdmin:
- list_display = ['name', 'mobile', 'course_name', 'add_time']
- search_fields = ['name', 'mobile', 'course_name']
- list_filter = ['name', 'mobile', 'course_name', 'add_time']
- class CourseCommentsAdmin:
- list_display = ['user', 'course', 'comments', 'add_time']
- search_fields = ['user', 'course', 'comments']
- list_filter = ['user__nick_name', 'course__name', 'comments', 'add_time']
- class UserFavoriteAdmin:
- list_display = ['user', 'fav_id', 'fav_type', 'add_time']
- search_fields = ['user', 'fav_id', 'fav_type']
- list_filter = ['user__nick_name', 'fav_id', 'fav_type', 'add_time']
- class UserMessageAdmin:
- list_display = ['user', 'message', 'has_read', 'add_time']
- search_fields = ['user', 'message', 'has_read']
- list_filter = ['user', 'message', 'has_read', 'add_time']
- class UserCourseAdmin:
- list_display = ['user', 'course', 'add_time']
- search_fields = ['user', 'course', 'add_time']
- list_filter = ['user__nick_name', 'course__name', 'add_time']
- xadmin.site.register(UserAsk, UserAskAdmin)
- xadmin.site.register(CourseComments, CourseCommentsAdmin)
- xadmin.site.register(UserFavorite, UserFavoriteAdmin)
- xadmin.site.register(UserMessage, UserMessageAdmin)
- xadmin.site.register(UserCourse, UserCourseAdmin)
xadmin全局配置
使用xadmin的主题功能,编辑users.adminx.py
- from xadmin import views
- class BaseSetting:
- enable_themes = True
- use_bootswatch = True
- xadmin.site.register(views.BaseAdminView, BaseSetting)
修改左上角logo,及下面的版权信息,编辑users.adminx.py
- class GlogbalSettings:
- site_title = '慕学后台管理系统'
- site_footer = '慕学在线网'
- xadmin.site.register(views.CommAdminView, GlogbalSettings)
左侧边栏很长,可以让它收起来,编辑users.adminx.py
- class GlogbalSettings:
- site_title = '慕学后台管理系统'
- site_footer = '慕学在线网'
- menu_style = "accordion"
app显示的是英文,我们想把它显示为我们自定义的名称
这个其实很简单,在我们创建app的时候,Django会在该app下自动创建apps.py文件,这个文件就是用于配置app显示名称的
users
编辑users.apps.py
- from django.apps import AppConfig
- class UsersConfig(AppConfig):
- name = 'users'
- verbose_name = '用户信息'
编辑users.__init__.py
- default_app_config = 'users.apps.UsersConfig'
courses
编辑courses.apps.py
- from django.apps import AppConfig
- class CoursesConfig(AppConfig):
- name = 'courses'
- verbose_name = '课程信息'
编辑courses.__init__.py
- default_app_config = 'courses.apps.CoursesConfig'
organization
编辑organization.apps.py
- from django.apps import AppConfig
- class OrganizationConfig(AppConfig):
- name = 'organization'
- verbose_name = '机构和教师管理'
编辑organization.__init__.py
- default_app_config = 'organization.apps.OrganizationConfig'
operation
编辑operation.apps.py
- from django.apps import AppConfig
- class OperationConfig(AppConfig):
- name = 'operation'
- verbose_name = '用户操作'
编辑operation.__init__.py
- default_app_config = 'operation.apps.OperationConfig'
4、Django实战第4天:xadmin快速搭建后台管理系统的更多相关文章
- xadmin快速搭建后台管理系统
一.xadmin的特点: 1.基于Bootstrap3:Xadmin使用Bootstrap3.0框架精心打造.基于Bootstrap3,Xadmin天生就支持在多种屏幕上无缝浏览,并完全支持Boots ...
- admin快速搭建后台管理系统
一.基于admin后台管理系统的特点: 权限管理:权限管理是后台管理系统必不可少的部分,拥有权限管理,可以赋予用户增删改查表权限(可以分别赋予用户对不同的表有不同的操作权限): 前端样式少:后台管理主 ...
- 如何使用活字格快速搭建Bug管理系统?
Bug管理系统是指一种用于添加Bug.修复Bug.测试Bug.删除Bug的一套完整的Bug管理系统. 完整的Bug管理过程包含: 1.测试人员利用Bug管理系统提交发现的bug. 2.测试人员把bug ...
- xadmin快速搭建一个后台管理系统
环境:python3.5.2 ,django 2.0 ,xadmin2.0 Firsttly, 到 https://github.com/sshwsfc/xadmin/tree/django2上下载源 ...
- 使用moy快速开发后台管理系统(一)
moy是什么? moy 是基于模型框架 kero 和 UI 框架 neoui 实现的应用框架,是前端集成解决方案,为企业级应用开发而生.github地址:iuap-design/tinper-moy ...
- 1、快速搭建后台list
@RestController @CrossOrigin public class UserController { @Resource private UserService userService ...
- 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?【华为云技术分享】
1 概述 1.1 文章目的 本文通过一个实例介绍如何使用软件开发服务DevCloud完成一个C#Web项目的开发. 1.2 项目详情 1. 项目名称:超级冷笑话网站 2. 项目简介:一个Web网站,包 ...
- Android移动后端服务(BAAS)快速搭建后台服务器之Bmob-android学习之旅(75)
个人移动开发者的最头疼的问题,就是App的网络后台,包含数据库等,国外目前有比较成熟的解决方案,但是限制于墙的问题,推荐国内的解决方案,比较出名的是Bmob和AVOS cloud和Atom等,这一次我 ...
- 夺命雷公狗ThinkPHP项目之----企业网站1之快速搭建后台
我们还是老规矩照老方法,将框架里面多余的东西都干掉,然后在index.php里面将框架搭建起来 <?php //定义项目目录 define('APP_PATH','./WEB/'); //开启调 ...
随机推荐
- 【BZOJ 1070】[SCOI2007]修车 费用流
就是拆个点限制一下(两点一排一大片),这道题让我注意到了限制这个重要的词.我们跑网络流跑出来的图都是有一定意义的,一般这个意义就对应了问题的一种方案,一般情况下跑一个不知道对不对的方案是相对容易的我们 ...
- 【BZOJ 2822】[AHOI2012]树屋阶梯 卡特兰数+高精
这道题随便弄几个数就发现是卡特兰数然而为什么是呢? 我们发现我们在增加一列时,如果这一个东西(那一列)他就一格,那么就是上一次的方案数,并没有任何改变,他占满了也是,然后他要是占两格呢,就是把原来的切 ...
- debounce 与 throttle 区别
原文地址:http://undefinedblog.com/debounce-and-throttle/ 二.什么是debounce 1. 定义 如果用手指一直按住一个弹簧,它将不会弹起直到你松 ...
- Codeforces Round #524 (Div. 2) C. Masha and two friends
C. Masha and two friends 题目链接:https://codeforc.es/contest/1080/problem/C 题意: 给出一个黑白相间的n*m的矩阵,现在先对一个子 ...
- codeforces 110E Lucky Tree
传送门:https://codeforces.com/contest/110/problem/E 题意:给你一颗树,节点与节点之间的边有一个边权,定义只由4和7组成的数字是幸运数字,现在要你求一共有多 ...
- DOM操作的一个小坑
最近在苦读<JavaScript高级程序教程>,真不愧是前端圣经,学到了很多东西. nodeList.NameNodeMap.HTMLCollection这三个集合是动态的!每当文档发生变 ...
- 在eclipse中使用JUnit4,以及使用JUnit4进行单元测试的技巧
一 在eclipse中使用JUnit4 首先在工程上右键,选择属性,找到Java Builder Path,添加JUnit4的lib,如下图: 在要测试的类上右键新建 Junit test cas ...
- 51nod 拉勾专业算法能力测评消灭兔子 优先队列+贪心
题目传送门 这道题一开始想了很久...还想着写网络流 发现根本不可能.... 然后就想着线段树维护然后二分什么的 最后发现优先队列就可以了 代码还是很简洁的啦 233 就是把兔子按血量从大到小排序一下 ...
- autoKeras Windows 的入门测试
在测试中分析一下ide的效果,在pycharm中测试的时候老师提示内存溢出,而且跑autoKeras的cnn时确实消耗很大空间.但是同样的电脑,换了vscode进行测试的时候没有问题.我也不知道什么回 ...
- bzoj 1016 深搜
首先我们知道MST的一些性质,对于这道题来说就是,假设我们先求出一颗MST设为G,由已知边权相同的边最多会有10条,那么假设我们在这10条边中选取size条边∈G,那么我们在这边权相同的边集E中任意选 ...