幕课网教育平台学习笔记,全套无死角演示

首先说明

本资源来源是幕课网的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>
View Code

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
View Code

每建 一个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' ,
]
View Code

在次运行同步表,则生成一个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
View Code
在建一个管理课程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"
View Code

 
在新建一个机构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
View Code



 
在新建一个用户课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
View Code
经过以上的构建 ,现在所以需要的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)
View Code

第二在做关于 教师的表   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)
View Code

 第三,在用户操作的  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)
View Code
然后做章节记录表 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)
View Code
做好表关联,我们在做一下全站配置 比如菜单伸缩,主题配色,页头页尾
我们把配置入在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 用这个方法一致搞定,,重启系统搞定,


到此一个网站 从数库设计到后台全部写完,,关于逻辑页面交互形式,我将在另一章写,这儿写多加载慢






















原文地址:https://www.cnblogs.com/fgxwan/p/9713768.html