首先说明
本资源来源是幕课网的python教育平台,但是原教程是python 2.7 django是1.9.8 现在学起来太过时了,所以我想把他 整理修改成高版本,但是时间有限,我就没有 录课,只做了代码重新打一片,修了版本差异,重新实现,另外原教程并没有免费提供代码,我将代码整理出,方便python的人学习
本次环境是2018年最新pytho 3.6以上 django 版本 2.1以上 在次注定版本差异问题
其实本人工作给django无关,只是别人分享给我了这套视频,放在硬盘也没有用,删掉可惜,所以决定把他成文章,然后就可以安心清楚硬盘,,
正文:
第一章,,先来复习以前的 django 知识, 因为这儿毕竟是实战课程,所以不会做基础说明,但是还是小小的复习一下基础,热身开始!!!!
在写一个项目前先搞一个aPP
Tools->Run manage Task....
> startapp message #运行此命令新建一条app
由于一个项目app文件太多,不方便管理,可以新建一个apps总文件,把所有的app文件放入apps文件中,改变了app路径,那么无论是导入还是IDE提示都会出错,在导入时需要:from apps.message import views,//
解决ide识别问题可以,file ->meki file->
解决文件路径问题可以在配置文件中加入:
配置静态文静:先新建一个static文件:并在steetigs.py中配置文件中添加:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
新建日志生成文件:新建 名为log文件。。。。。
新建上传文件,新建 名为media。。。。。
配置数据库:由于数据库访问权限是很严管的,这不是正式开发,只是本机测试,暂没有建用户,和访问ip,这儿只作简单配置
在正式使用数库之前,需要安装mysql驱动
> pip install pymysql #执行这条指令可以安装驱动
其实不安装数据库,django默认也有数据库可以使用,只是mysql太流行了,作为学习者,不使用说不过去。。。逼着就 上吧!!
安装好后,配置文件修改数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "mxshop",
'USER':'root',
'PASSWORD':'142857',
'HOST':"127.0.0.1",
'PORT': '3306',
"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
}
}
最后一步还要在主app的 —init__.py 中加入:
import pymysql
pymysql.install_as_MySQLdb()
配置好数据库后需要同步数据库自动生成表
Tools->Run mange->
makemigrations
//正常返回: No chanage detected
Tools->Run mange->
migrate
//生成数据库表。
以上配置后可以开始写路由了,先在url.py中,增加路由一个新的路由,和一个对应函数,url.py 中增加路由,,views.py文件中增加函数对应
路由部份
urlpatterns = [
path('admin/', admin.site.urls),
path('index/',getform)
]
views.py文件中部份
def getform(request):
return render(render,'Xform.html') //不能直接写form.html 注意关健字
本章演示请求到显示过程:
1,先在模板文件建一个带表单html的文件:
简要代码如下:
<link rel="stylesheet" href="/static/css/style.css"> <form action="" method="post" class="smart"> <h1>留言信息 <span>请填写留言信息</span> </h1> <label for=""> <spqn>姓名</spqn> <input id="name" type="text" name="name" class=""> <div class = ""></div> </label> <label for=""> <spqn></spqn> <input id="bnv" type="submit" value="提交" class=""> <div class = ""></div> </label>
2,在静态文件下面新建一个 css,js,的文件,放入css文件
前端内容先跳过:
现在开始讨论 OPm操作
在djagnog的app中,会一个models.py文件,在里面可以操作数据库模型,每一类对应一张表
比如现在新建一个表,并设置字段,,
class UserMessage(models.Model): name = models.CharField(max_length=20,verbose_name="用户名") email = models.CharField(max_length=25, verbose_name="邮箱") address = models.CharField(max_length=100, verbose_name="联系地址") mess = models.CharField(max_length=200,verbose_name="留言信息") class Meta: verbose_name= "用 户信息" verbose_name_plural = verbose_name
每建 一个app 需要在配置文件中加放注册:在
INSTALLED_APPS=[
..........................
加入app名字。这儿以dessage为例
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'message' , ]
在次运行同步表,则生成一个UserMessage的表
在上面只是用了 CharFied字段,,在django的有非常多的属性字段,对于基础不熟于请参考原基础,这儿我是整理,仅限本人能看懂
models.ForeignKey //主健和外健
models.DateTimeField //
models.IntegerField
models.IPAddressField
models.FileField
models.ImageField
有了表列属性,还得有字段属性,比如maxa_lenagt 这类的
还有mete的属性 比如
Class Meta:
verbose_name = "用户留言"
db_table = "表名字"
ordeing = "_object_id" //排序方式
verbose_name _plurdl = verbose_name 仅用于显示,后台用
数据库操作:
object.all是查的方法,返回query类型 ,可以遍历其元素
def getform(request):
all_message = UserMessage.objects.all()
for message in messages:
pint message.name
return render(request,'message_form.html')
语法示例:
1
all_message = UserMessage.objects.filter(name = 'bobby')
2
all_message = UserMessage.objects.filter(name = 'bobby',address = '不海')
读取返的数据的方法可以用all_message[0],也可以切片读取【0:6】
增加数据示例:
def getform(request):
user_m = userMessage() //这个类一旦运行,就会实例化一个句柄给对象,就可以给字段估值
user_M.name = 'bobby2'
user_m.message = "hekllo"
user_address.address = "上海"
user_m.email = "2@2.com"
user_m.object_id = "123456"
user_m.save() // 调用这个方法就可以保存了
return render(request,'message_form.html')
谈谈怎么接收数据!!前端数据是通过from name = "?????"
后台不能直接接收,需要在设置文件中注释掉 csrf相关信息 或带上csrs信息发送 表单中加一下
{%csrf token%}
模块嵌套
后台得到的数据先放放一个字典,无组,对象都行,在视图函数中传入,前端就可以接收到例;
def getform(request):
all_me = UserMessage.objects.filter(name="xsy")
if all_me:
message = all_me
return render(request,'message_form.html',{"mess":all_me})
--------------------------------------------------------------------------------------
以下是数据库设计,包括表继承。步骤,主要是熟悉字段用,理一下而己
新建5个app 并在models.py中建好类,用于生成表,和后台管理用
第一个 users 这个表继承系统的用户表,代码如下:
class UserProfile(AbstractUser):
genders =(
("meae","男"),
("female","女"),
)
nick_name = models.CharField(max_length=50,verbose_name = "称呢",default = "")
birday = models.DateTimeField(verbose_name = "生日",null = "",bland="")
gender = models.CharField(choices=genders,default="female",max_length=6,verbose_name="性别")
addfress = models.CharField(max_length=100,default = "",verbose_name="地")
mobile = models.CharField(max_length=11,null=True,bland=True,verbose_name="手机号")
image = models.ImageField(upload_to="image/%y/%m",default="image/defult.png",max_length=100)
class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username //重载类的一个字符方法而己
然后在apps 那儿注册models 相关的app 在设置模块那儿找到以下代码,在最后加入:users,并在下面加入重载方法:
AUTH_USER_MODEL = "users.UserProfile"
NSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users'
]
AUTH_USER_MODEL = "users.UserProfile"
因为我们要操作图片库,所以要安装pillow 处理图片的模块,所以在这儿先运行 pip install Pillow
最后在执行下面二个命令就新建好一个对应表了,其它表也是过程一样,,说要说明的是,如果,这个suers模型就更名,或者操作错了,造 成
表混乱,删除全部在在执行一次好。。
python manage.py makemigrations
python manage.py migrate
我们设设计一个用户app 主要放轮播图,用户资料 和验证信息用,
models.py文件内容如下:
from django.db import models from datetime import datetime # Create your models here. from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): genders =( ("meae","男"), ("female","女"), ) nick_name = models.CharField(max_length=50,verbose_name = "称呢",default = "") birday = models.DateTimeField(verbose_name = "生日",null = "",blank="") gender = models.CharField(choices=genders,default="female",max_length=6,verbose_name="性别") addfress = models.CharField(max_length=100,default = "",verbose_name="地") mobile = models.CharField(max_length=11,null=True,blank=True,verbose_name="手机号") image = models.ImageField(upload_to="image/%y/%m",default="image/defult.png",max_length=100) class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def __str__(self): return self.username class EmailVerifyRecord(models.Model): code = models.CharField(max_length=20,verbose_name="验证码") email = models.EmailField(max_length=50,verbose_name="邮箱") send_type = models.CharField(choices=(("register","注册"),("forget","女")),defalut = "forget") send_time = models.DateTimeField(default="datetime.now") class Meta: vebose_name = "邮箱验证码" verbose_name_plural = vebose_name class Banner(models.Model): title = models.CharField(max_length=100,verbose_name="标题") image = models.ImageField(upload_to="banner/%Y/%m",verbose_name="轮播图") url = models.URLField(max_length=200,verbose_name="访问地址") index = models.IntegerField(default = 100,verbose_name="排序") add_time = models.DateTimeField(datetime = datetime.now,verbose_name="添加时间") class Meta: verbose_name = "轮播图" verbose_name_plural = verbose_name
在建一个管理课程app,包括课程资源,章节名称,课程名称 courses
models.py文件内容如下:
from django.db import models from datetime import datetime # Create your models here. class Course(models.Model): name = models.CharField(max_length=50,verbose_name="课程名") desc = models.CharField(max_length=300, verbose_name="课 程描述") detail = models.TextField(verbose_name="课程详情") degree = models.CharField(choices=(('cj','初级'),('zj','中级'),('gj','高级')),default='cj',max_length=6) learn_times = models.IntegerField(default=0,verbose_name="学习时长") students = models.IntegerField(default=0,verbose_name="学习人数") fav_nums = models.IntegerField(default=0,verbose_name="收藏人数") image = models.ImageField(upload_to="courses/%Y/%m",default="",verbose_name="封面图") click_nums = models.IntegerField(default=0,verbose_name = "点击数") add_time = models.DateTimeField(default = datetime.now,verbose_name='添加时间') class Meta: verbose_name = "课程" verbose_name_plural = verbose_name class lesson(models.Model): course = models.ForeignKey(Course, verbose_name="课程",on_delete=models.CASCADE) name = models.CharField(max_length = 25,verbose_name="章节名" ) add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Video(models.Model): lesson = models.ForeignKey(lesson, verbose_name="章节",on_delete=models.CASCADE) name = models.CharField(max_length=100,verbose_name="视频名字") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间" ) class Meta: verbose_name = "章节资源" verbose_name_plural = "verbose_name" class CourseResouce(models.Model): name = models.CharField(max_length=100, verbose_name="资源名称") download = models.FileField(upload_to="course/resourse/%Y/%m",verbose_name="资源文件",max_length = 100) add_time = models.DateTimeField(default= datetime.now, verbose_name="添加时间") class Meta: verbose_name = "课程资源" verbose_name_plural = "verbose_name"
在新建一个机构app 名为: organization
models.py文件内容如下:
from django.db import models # Create your models here. from datetime import datetime from django.db import models from django.db import models class CityDict(models.Model): name = models.CharField(max_length = 20,verbose_name = "城市") desc = models.CharField(max_length=200,verbose_name="描述") add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "城市" verbose_name_plural = verbose_name class CourseOrg(models.Model): name = models.CharField(max_length=50,verbose_name="机构名称") desc = models.TextField(verbose_name="机构描述") click_nums = models.IntegerField(default=0,verbose_name="点击数'") fav_nums = models.ImageField(default=0,verbose_name="收藏数") image = models.ImageField(upload_to="org/%Y/%m",verbose_name="封面图") address = models.CharField(max_length=150,verbose_name="机构地址") city = models.ForeignKey(CityDict,verbose_name="所在城市",on_delete=models.CASCADE) add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "课程机构" verbose_name_plural = verbose_name class Teacher(models.Model): org = models.ForeignKey(CourseOrg,verbose_name="所属机构",on_delete=models.CASCADE) name = models.CharField(max_length = 50,verbose_name = "教师名字") work_years = models.IntegerField(default=0,verbose_name="工作年限") work_company = models.CharField(max_length=50,verbose_name="就职公司") work_position = models.CharField(max_length=50,verbose_name="公司职位") points = models.CharField(default=0,verbose_name="教育特点",max_length=100) fav_nume = models.IntegerField(default=0,verbose_name="点击数") add_time = models.DateTimeField(default = datetime.now) class Meta: verbose_name = "教师" verbose_name_plural = verbose_name
在新建一个用户课app 名为 opration ,models.py的代码如下:
from django.db import models from datetime import datetime from users.models import UserProfile from courses.models import Course # Create your models here. class userAsk(models.Model): name = models.CharField(max_length=20,verbose_name="姓名") mobile = models.CharField(max_length=11,verbose_name="手机") couse_name = models.CharField(max_length=50,verbose_name="课程名") add_time = models.DateTimeField(default=datetime,verbose_name="添加时间") class Mate: verbose_name = "用户资询" verbose_name_Plural = verbose_name class CourseComment(models.Model): user = models.ForeignKey(UserProfile,verbose_name="用户",on_delete=models.CASCADE) course = models.ForeignKey(Course,verbose_name="课程",on_delete=models.CASCADE) Comment = models.CharField(max_length = 20, verbose_name = "评论") add_time = models.DateTimeField(default=datetime, verbose_name="添加时间") class Meta: verbose_name = "课程评论" verbose_name_plural = verbose_name class UserFavorite(models.Model): user = models.ForeignKey(UserProfile,verbose_name="用户",on_delete=models.CASCADE) fav_id = models.IntegerField(default=0,verbose_name="数据id") fav_type = models.IntegerField(choices=((1,"课程"),(2,"课程机构"),(3,'教师名字')),default=1,verbose_name="收藏类型") add_time = models.DateTimeField(default=datetime, verbose_name="添加时间") class Meta: verbose_name = "用户收藏" verbose_name_plural = verbose_name class UserMessage(models.Model): user = models.IntegerField(default=0,verbose_name="接收用户") message = models.CharField(max_length = 200,verbose_name = "消息内容") has_read = models.BooleanField(default=False,verbose_name="不否也读") add_time = models.DateTimeField(default=datetime, verbose_name="添加时间") class Meta: verbose_name = "用户消息" verbose_name_plural = verbose_name class UserCourse(models.Model): user = models.ForeignKey(UserProfile, verbose_name="用户",on_delete=models.CASCADE) course = models.ForeignKey(Course, verbose_name="课程",on_delete=models.CASCADE) add_time = models.DateTimeField(default=datetime, verbose_name="添加时间") class Meta: verbose_name = "用户课程" verbose_name_plural = verbose_name
经过以上的构建 ,现在所以需要的app有和表基础建好了,开始在设置那儿注删所有的app 然后用于生成数据库需要的表:
在主文件的setting.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',
] //红色部份是在后面添加所有的app名字
对于数据库相关生在 操作最后就是生成数据库表,和管理app文件过多的问题,新建一个apps文件,将所以app拖入,
然后执行:整个操作中,有外连的地方都要加上on_delete = models.CASCADE
python manage.py makemigrations
python manage.py migrate
塔建后台管理系统:
默认 admin可以登到后台,但是帐号为空,尝试root访问时出现:
所以得先createsuperuser 命令创建帐户
Tools -> Run Mangae ..createsuperuser
登录后台是英文界面,修改中文方法:,将配置文件:
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
修改成:#————————————————————————————————————————————————————————————————————————————————————————————-
如下:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
重启中文显示了
#——————————————————————————————————————————————————————————————————————————————————————————————
现在我们可以把所有表注册到后台,本来user是自动注了,只是被们重载了,需要重新注册过来
先做userProfile表
先找到user的app,打开 admin.py 文件
编写代码:
from django.contrib import admin
from .models import UserProfile
# Register your models here.
class UserProfileAdmin(admin.ModelAdmin):
pass
admin.site.register(UserProfile, UserProfileAdmin)
这样便在后台注册一个表,
官方默认的管理系统不好看,我们安装一个Xadmin
在python3 .6 只 如果用pip install xAdmin的话会报编码错误,估记是编码问题
C:UsersAdministrator>workon Xflask
(xflask) C:UsersAdministrator>pip install xadmin
Collecting xadmin
Using cached https://files.pythonhosted.org/packages/1d/e9/2ac160c532d0d462142fa90aa86a0e317295e8d86fa4caf84d04f6e24c49/xadmin-0.6.1.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:UsersADMINI~1AppDataLocalTemppip-install-ris4dywqxadminsetup.py", line 11, in <module>
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 3444: illegal multibyte sequence
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:UsersADMINI~1AppDataLocalTemppip-install-ris4dywqxadmin
只能用原码下载方法,
使用:下载: https://github.com/sshwsfc/xadmin/tree/django2(记得要直接下载zip) 然后解压放在根目录,新建一个extera_apps,
专门外置组件,把下载好的xadmin放入,然后在配置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'))
要想使用Xadmin 也是需要在setting.py 中 INSTALLED-APPS = []
那儿注册一下的
添加
‘xadmin’,
'crispy_forms'
'reversion',
//这个是安装xadmin时自动装的,也要注册一下,
最后运行python manage.py makemigrations 然后执行python manage.py migrate 生成数据库
然后配置一下url ,,
rlpatterns = [
path('xadmin/', xadmin.site.urls),
]
作业??? 如果我们是手工安装的Xadmin 那儿依赖的包怎么安装呢,,回忆一下。。可以用这个方法先安装一下在删掉,只要自动的依包就好:
pip install https://github.com/sshwsfc/xadmin/tarball/master
现在开始注册后表。
由于xadmin 需要一个adminx的模型 文件,所以我们需要在每个app建一个adminx.py文件然后注册上内容:
以基本为:
import xadmin
from .models import user //导入表
class EmailVerifyRecordAdmin(object):
list_display = ['code','email','send_type','send_time'] //用于显示,每个健代表一个字段名
search_fields =['code','email','send_type','send_time'] // 用于查询用
list_filter = ['code','email','send_type','send_time'] // 用过过虑
xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin) // 生成注册关联
现在能做手就是在每个app 下面,把每个表都做一下关联,,
第一先做关于用户的表 users 的app 由于user表也由系统生成,只做其它二张表:先建一个adminx。py 代码如下
__author__ = "xsy" __date__ = "2018/10/25" import xadmin from .models import EmailVerifyRecord,Banner class EmailVerifyRecordAdmin(object): list_display = ['code','email','send_type','send_time'] search_fields =['code','email','send_type','send_time'] 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','add_time'] list_filter = ['title', 'image', 'url', 'index','add_time'] xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin) xadmin.site.register(Banner,BannerAdmin)
第二在做关于 教师的表 organization app 方法如上,先在目录下建一个adminx.py 代码如下:
__author__ = "xsy" __date__ = "2018/10/25" import xadmin from .models import CityDict, CourseOrg, Teacher class CityDictAdmin(object): list_display = ['name','desc','add_time'] search_fields = ['name','desc'] list_filter = ['name','desc','add_time'] class CourseOrgAdmin(object): list_display = ['name','desc','click_nums','fav_nums','image','address','city','add_time'] search_fields = ['name','desc','click_nums','fav_nums','image','address','city'] list_filter = ['name','desc','click_nums','fav_nums','image','address','city','add_time'] class TeacherAdmin(object): list_display = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'fav_nume', 'add_time'] search_fields = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'fav_nume'] list_filter = ['org', 'name', 'work_years', 'work_company', 'work_position', 'points', 'fav_nume', 'add_time'] xadmin.site.register(Teacher,TeacherAdmin) xadmin.site.register(CityDict,CityDictAdmin) xadmin.site.register(CourseOrg,CourseOrgAdmin)
第三,在用户操作的 operation app 关联,代码如下:
__author__ = "xsy" __date__ = "2018/10/25" import xadmin from .models import userAsk, UserCourse, UserMessage, CourseComment, UserFavorite class userAsKAdmin(object): list_display = ['name', 'mobile', 'couse_name', 'add_time'] search_field =['name', 'mobile', 'couse_name',] list_filter = ['name', 'mobile', 'couse_name', 'add_time'] class UserCourseAdmin(object): list_display = ['user', 'course', 'add_time'] search_field = ['user', 'course'] list_filter = ['user', 'course', 'add_time'] class UserMessageAdmin(object): list_display = ['user', 'message', 'has_read','add_time'] search_field = ['user', 'message'] list_filter = ['user', 'message', 'has_read','add_time'] class CourseCommentAdmin(object): list_display = ['user', 'course', 'Comment', 'add_time'] search_field = ['user', 'course', 'Comment'] list_filter = ['user', 'course', 'Comment', 'add_time'] class UserFavoriteAdmin(object): list_display = ['user', 'fav_id', 'fav_type', 'add_time'] search_field = ['user', 'fav_id', 'fav_type'] list_filter = ['user', 'fav_id', 'fav_type', 'add_time'] xadmin.site.register(userAsk,userAsKAdmin) xadmin.site.register(UserCourse,UserCourseAdmin) xadmin.site.register(UserMessage,UserMessageAdmin) xadmin.site.register(CourseComment,CourseCommentAdmin) xadmin.site.register(UserFavorite,UserFavoriteAdmin)
然后做章节记录表 courser app 关联 内容代码如下:
__author__ = "xsy" __date__ = "2018/10/25" import xadmin from .models import Course,lesson,Video,CourseResouce class CourseAdmin(object): list_display = ['name','desc','detail','degree','learn_times','students','fav_nums','image','click_nums','add_time'] search_field = ['name','desc','detail','degree','learn_times','students','fav_nums','image','click_nums',] list_filter = ['name','desc','detail','degree','learn_times','students','fav_nums','image','click_nums','add_time'] class lessonAdmin(object): list_display = ['course','name','add_time'] search_field = ['course','name',] list_filter =['course','name','add_time'] class CourseResouceAdmin(object): list_display = ['name', 'download', 'add_time'] search_field = ['name', 'download'] list_filter = ['name', 'download', 'add_time'] class VideoAdmin(object): list_display = ['lesson', 'name', 'add_time'] search_field = ['lesson', 'name'] list_filter = ['lesson', 'name', 'add_time'] xadmin.site.register(Course,CourseAdmin) xadmin.site.register(lesson,lessonAdmin) xadmin.site.register(CourseResouce,CourseResouceAdmin) xadmin.site.register(Video,VideoAdmin)
做好表关联,我们在做一下全站配置 比如菜单伸缩,主题配色,页头页尾
我们把配置入在user app下
先做一个基础配置增加主题
先导入xadmin 的 views
import xadmin
加入配置:
class BaseSetting(object):
endble_themes = True
use_booswatch = True
然后在最后注册界面
xadmin.site.register(views.BaseAdminView,BaseSetting),
到现在可以有主题功能了,可以新加主题。。
完整的网页界面配好在一起参考,现在接页头页尾
增加配置
class GlobalSettings(object):
site_title = "这是一个面页面的管理"
site_footer = "这是页尾显示的"
menu_sytle = "accordion" // 菜单伸缩
后面注册界面
xadmin.site.register(views.CommAdminView,GlobalSettings)
在apps的名称是在每个app下面有个apps的文件,名字是在在那儿配置的,可以改别名,后台才能显示为中文
这些英文是apps的原名,可以在apps 下面的apps 文件下修改
只需要在下面加一个别名的方法,比如:
class operationConfig(AppConfig)
name = "operation"
verbose_name = "用户操作'
还得在在当前的 __init__.py 中
写入:
default_app_config = "operation.apps.OperationConfig'
在举一个例 我们来改user.py 这个app
先在当前的apps.py 中找到 加入verbose_name = “” 示例代码如下:
class UsersConfig(AppConfig):
name = 'user'
verbose_name = "用户"
打开 ————init__.py 增加
default_app_config = "user.apps.UserConfig"
其它几个apps 用这个方法一致搞定,,重启系统搞定,
到此一个网站 从数库设计到后台全部写完,,关于逻辑页面交互形式,我将在另一章写,这儿写多加载慢