项目树

引入xadmin

pycharm在项目中创建存放xadmin的目录

右键项目名称-->pythonpackage-->输入名称:extra_app

拷贝xadmin代码到extra_app

(mxonline) zhaijunming@zhaijuningdeMBP:~/Desktop/Project/python$ git clone  https://github.com/zaxlct/imooc-django.git
(mxonline) zhaijunming@zhaijuningdeMBP:~/Desktop/Project/python$ cp -r imooc-django/extra_apps/xadmin MxOnline/extra_apps/.

配置settings.py

# 设置 apps, extra_apps 目录
sys.path.insert(,os.path.join(BASE_DIR,'apps'))
sys.path.insert(, os.path.join(BASE_DIR, 'extra_apps')) #添加xadmin app
INSTALLED_APPS = [
'xadmin',
'crispy_forms',
] LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False

配置url

MxOnline/urls.py

from django.conf.urls import url
from django.contrib import admin
import xadmin urlpatterns = [
url(r'^admin/', xadmin.site.urls),
]

生成数据表

makemigrations
migrate

测试

访问127.0.0.1:8000/admin

页头和页尾自定义

随便一个项目的adminx.py中增加以下代码

from xadmin import views

class GlobalSetting(object):
site_title = "慕学网后台管理系统"
site_footer = "慕学在线网" xadmin.site.register(views.CommAdminView, GlobalSetting)

左侧菜单栏样式改变

修改前

修改后

随便一个项目的adminx.py中增加以下代码

from xadmin import views

class GlobalSetting(object):
site_title = "慕学网后台管理系统"
site_footer = "慕学在线网"
menu_style = "accordion" xadmin.site.register(views.CommAdminView, GlobalSetting)

左侧菜单栏app名称改成中文

修改前

修改后

每一个app同理

比如users这个app

users-->apps.py

from django.apps import AppConfig

class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户信息' 增加这个字段,这个就是要显示的名称

users-->init.py

default_app_config = "users.apps.UsersConfig"

将models注册进xadmin

表结构(models.py)

from django.db import models
from datetime import datetime
from organization.models import *
# Create your models here.
#这里有多个表,CourseOrg(机构表),course(课程表),lesson(章节表),Video(视频表),机构和课程是一对多的关系,一个机构有多个课程,课程和章节是一对多的关系,一个课程有多个章节,章节和视频也是一对多关系,一个章节有多个视频
class CourseOrg(models.Model):
'''机构'''
name = models.CharField(max_length=50,verbose_name='机构名称')
choice_category = (
('pxjg', '培训机构'),
('gx', '高校'),
('gr', '个人'),
)
category = models.CharField(default='pxjg',max_length=20,choices=choice_category)
desc = models.TextField(verbose_name='机构描述')
click_num = models.IntegerField(default=0,verbose_name='点击数')
fav_num = models.IntegerField(default=0,verbose_name='收藏数')
image = models.ImageField(upload_to='org/%Y/%m',verbose_name='logo')
address = models.CharField(max_length=150,verbose_name='机构地址')
city = models.ForeignKey(CityDict,verbose_name='机构所在城市')
student = models.IntegerField(default=0,verbose_name='学习人数')
course_nums = models.IntegerField(default=0,verbose_name='课程数')
add_time = models.DateTimeField(default=datetime.now) class Meta:
verbose_name = '课程机构'
verbose_name_plural = '课程机构' def __str__(self):
return self.name
class Course(models.Model):
'''课程'''
course_org = models.ForeignKey(CourseOrg,verbose_name='课程机构',null=True,blank=True)
name = models.CharField(max_length=,verbose_name='课程名')
desc = models.CharField(max_length=,verbose_name='课程描述')
detail = models.TextField(verbose_name='课程详情')
choice_degree = (
('cj','初级'),
('zj','中级'),
('gj','高级'),
)
degree = models.CharField(choices=choice_degree,max_length=,verbose_name='课程难度')
learn_times = models.IntegerField(default=,verbose_name='学习时长(分钟数)')
students = models.IntegerField(default=,verbose_name='学习人数')
fav_nums = models.IntegerField(default=,verbose_name='收藏人数')
image = models.ImageField(upload_to='courses/%Y/%m',verbose_name='封面图')
click_nums = models.IntegerField(default=,verbose_name='点击数')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '课程'
verbose_name_plural = '课程' def __str__(self):
return self.name class Lesson(models.Model):
'''章节'''
course = models.ForeignKey(Course,verbose_name='课程')
name = models.CharField(max_length=,verbose_name='章节名称')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '章节'
verbose_name_plural = '章节' def __str__(self):
return self.name class Video(models.Model):
'''视频'''
lesson = models.ForeignKey(Lesson,verbose_name='章节')
name = models.CharField(max_length=,verbose_name='视频名称')
add_time = models.DateTimeField(default=datetime.now,verbose_name='添加时间') class Meta:
verbose_name = '视频'
verbose_name_plural = '视频' def __str__(self):
return self.name

adminx.py

import xadmin
from xadmin import views from .models import * class CourseAdmin(object):
list_display = ['course_org','name', 'desc', 'detail', 'degree','learn_times','students','fav_nums','image','click_nums','add_time']
search_fields = ['course_org','name', 'desc', 'detail', 'degree','students','fav_nums','image','click_nums']
list_filter = ['course_org__name','name', 'desc', 'detail', 'degree','learn_times','students','fav_nums','image','click_nums','add_time'] class LessonAdmin(object):
list_display = ['course', 'name','add_time']
search_fields = ['course', 'name']
#由于lesson和course是一对多关系,一个课程有多个章节,这里的course是course 的外键,想要根据课程名称过滤章节的话,需要指定course中的一个字段,比如说name,就是根据课程名过滤属于这个课程名称的所有章节
list_filter = ['course__name', 'name','add_time'] class VideoAdmin(object):
list_display = ['lesson','name','add_time']
search_fields = ['lesson','name']
list_filter = ['lesson__name', 'name', 'add_time'] xadmin.site.register(Course,CourseAdmin)
xadmin.site.register(Lesson,LessonAdmin)
xadmin.site.register(Video,VideoAdmin)
#我们把course,lesson,video注册进xadmin了

效果:

Django学习系列之Python+Xadmin的更多相关文章

  1. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  2. Django学习系列6:使用selenium测试用户交互

    学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...

  3. django学习系列——python和php对比

    python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...

  4. Python&Django学习系列之-激活管理界面

    1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...

  5. Django学习系列12:把Python变量传入模板中渲染

    从视图的Python代码中把变量传入HTML模板. 模板中使用哪种句法引入Python对象,要使用的符号{{...}},它会以字符串的形式显示对象: <html> <head> ...

  6. Python零基础学习系列之三--Python编辑器选择

    上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...

  7. Django学习系列5:为视图编写单元测试

    打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...

  8. Python零基础学习系列之四--Python程序设计思想

    前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...

  9. Django学习系列之request对象

    先来一个简单的实例 urls.py from django.conf.urls import url from django.contrib import admin from cmdb import ...

随机推荐

  1. opencv-flag

    http://blog.csdn.net/yiyuehuan/article/details/43701797 在Mat类中定义了这样一个成员变量: /*! includes several bit- ...

  2. C++ 类、对象、class

    一.对象初始化 1.不能在类声明中对数据成员初始化,因为类只是一个抽象类型,不占存储空间,无处容纳数据. 2.若某类的数据成员都是public,则可以像结构体一样初始化,如 Time t={12,21 ...

  3. 阿里云ECS安装sqlserver,本地无法连接问题排查思路

    1. 阿里云控制台-对应的ECS实例的安全组是否添加了响应的端口(1433)可以访问: 2. 服务器-sqlserver服务是否开启: 3. 服务器-sqlserver配置器,对应的端口是否启用,已经 ...

  4. leetcode_1014. Capacity To Ship Packages Within D Days

    https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/ 传送带要在D天内把所有货物传送完,但是传送带每天有传送容量 ...

  5. 阿里云服务器基本搭建_错误1_Permission denied (publickey)

    首先 修改这两个密码 然后重启服务器就可以了

  6. win10下anaconda3环境配置

    WINDOW系统设置环境变量:我的电脑右键-属性-高级系统设置-高级-环境变量中在path中加入你系统安装anaconda的目录下的scripts中: C:\Users\***\anaconda3\S ...

  7. (独孤九剑)--PHP简介与现况

    (1)为什么学习PHP? 1.好就业: 2.入门简单,学习周期短,两个月即可: 3.学习编程思路,使编程习惯更加规范: 4.大公司直招: 5.处理大并发数据: 6.开源,所以更加安全 (2)PHP是什 ...

  8. 【JavaScript从入门到精通】第一课

    第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...

  9. 精准判断是360、IE和其他浏览器

    function myexplorer(){ var explorer = window.navigator.userAgent; if (!!window.ActiveXObject || &quo ...

  10. CSU2188: Substring

    Description FST 是一名可怜的 ACMer,他很强,但是经常 fst,所以 rating 一直低迷. 但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有 ACMer ...