zoukankan      html  css  js  c++  java
  • 幕课网教育平台学习笔记,全套无死角演示

    首先说明

    本资源来源是幕课网的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 用这个方法一致搞定,,重启系统搞定,


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






















  • 相关阅读:
    Leetcode Python笔记
    Jenkins 自动化构建基于svn的vue项目 ,以及uniapp的H5项目
    Jenkins 持续化部署
    java中的各种锁详细介绍
    Maven私有仓库搭建 Nexu3
    Spring Cloud构建微服务架构(一)服务注册与发现
    SpringCloud学习笔记(开篇)
    介绍一款 redis 可视化工具
    java 在线网络考试系统源码 springboot mybaits vue.js 前后分离跨域
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
  • 原文地址:https://www.cnblogs.com/fgxwan/p/9713768.html
Copyright © 2011-2022 走看看