美文网首页
Python升级3.6 强力Django+杀手级Xadmin打造

Python升级3.6 强力Django+杀手级Xadmin打造

作者: 吕阳 | 来源:发表于2017-11-24 14:42 被阅读464次

    第2章 windows下搭建开发环境

    • 介绍项目开发需要安装的开发软件、 python虚拟virtualenv和 virtualenvwrapper的安装和使用、 最后介绍pycharm和navicat的简单使用
    2.2
    • 安装virtualenvwrapper
    pip install virtualenvwrapper-win
    
    • 退出虚拟环境deactivate

    第3章 通过留言版功能回顾django基础知识

    • 通过django简单实现一个留言板功能来回顾django的基础知识, 包括settings的配置、 url配置、 view逻辑、 model设计和templates的显示

    第4章 需求分析和model设计

    • 对系统进行需求分析, 然后设计出django app, 然后对每个app设计相应的django model数据表。系统共有四个app, users处理用户相关;courses处理课程相关;organization处理课程机构相关;operation处理用户操作相关
    • 更改数据库
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': "mxonline",
            'USER': 'root',
            'PASSWORD': "root",
            'HOST': "127.0.0.1"
        }
    }
    
    • 扩展Django自带的用户表,自定义自己的用户表.
    • 输入命令行有两种方式.
    1. tools-run manage.py Task


      manage.png

      在就是manage.py目录下输入全命令

    manage.py runserver
    

    2.更改MxOnline/users/models.py

    # _*_ encoding:utf-8 _*_
    from __future__ import unicode_literals
    from datetime import datetime
    
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    # Create your models here.
    
    
    class UserProfile(AbstractUser):
        nick_name = models.CharField(max_length=50, verbose_name=u"昵称", default="")
        birday = models.DateField(verbose_name=u"生日", null=True, blank=True)
        gender = models.CharField(max_length=6, choices=(("male", u"男"), ("female", "女")), default="female")
        address = models.CharField(max_length=100, default=u"")
        mobile = models.CharField(max_length=11, null=True, blank=True)
        image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length=100)
    
        class Meta:
            verbose_name = "用户信息"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.username
    

    3.setting注册app.在MxOnline中
    Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,其值引用一个自定义的模型。

    AUTH_USER_MODEL = "users.UserProfile"
    

    上面的值表示Django应用的名称(必须位于INSTALLLED_APPS中)和你想使用的User模型的名称。

    4-3setting.png
    1. ImageFiel需要安装pillow
    pip install pillow
    
    1. run-MxOnline
      提示
    valueErrornomigrations.png

    运行makemigrations users,下面是提示成功.


    makemigrations.png
    4-4
    • 避免相互引用设计数据库
    1数据库设计.png app设计完成.png
    1. 更改MxOnline/users/models.py,增加EmailVerifyRecord,Banner类.
    class EmailVerifyRecord(models.Model):
        code = models.CharField(max_length=20, verbose_name=u"验证码")
        email = models.EmailField(max_length=50, verbose_name=u"邮箱")
        send_type = models.CharField(verbose_name=u"验证码类型", choices=(("register",u"注册"),("forget",u"找回密码"), ("update_email",u"修改邮箱")), max_length=30)
        send_time = models.DateTimeField(verbose_name=u"发送时间", default=datetime.now)
    
        class Meta:
            verbose_name = u"邮箱验证码"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return '{0}({1})'.format(self.code, self.email)
    
    class Banner(models.Model):
        title = models.CharField(max_length=100, verbose_name=u"标题")
        image = models.ImageField(upload_to="banner/%Y/%m", verbose_name=u"轮播图", max_length=100)
        url = models.URLField(max_length=200, verbose_name=u"访问地址")
        index = models.IntegerField(default=100, verbose_name=u"顺序")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"轮播图"
            verbose_name_plural = verbose_name
    
    

    引包区域,1区python自带,2区,第三方包.3区,自己写的包.

    4-5 courses

    1. 新增app, courses
    newcourses.png
    1. 更改models.py
    # _*_ encoding:utf-8 _*_
    from __future__ import unicode_literals
    from datetime import datetime
    
    from django.db import models
    
    # Create your models here.
    
    
    class Course(models.Model):
    
        name = models.CharField(max_length=50, verbose_name=u"课程名")
        desc = models.CharField(max_length=300, verbose_name=u"课程描述")
        detail = models.TextField(verbose_name=u"课程详情")
        degree = models.CharField(verbose_name=u"难度", choices=(("cj","初级"), ("zj","中级"), ("gj","高级")), max_length=2)
        learn_times = models.IntegerField(default=0, verbose_name=u"学习时长(分钟数)")
        students = models.IntegerField(default=0, verbose_name=u'学习人数')
        fav_nums = models.IntegerField(default=0, verbose_name=u'收藏人数')
        image = models.ImageField(upload_to="courses/%Y/%m", verbose_name=u"封面图", max_length=100)
        click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"课程"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    
    class Lesson(models.Model):
        course = models.ForeignKey(Course, verbose_name=u"课程")
        name = models.CharField(max_length=100, verbose_name=u"章节名")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"章节"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    
    class Video(models.Model):
        lesson = models.ForeignKey(Lesson, verbose_name=u"章节")
        name = models.CharField(max_length=100, verbose_name=u"视频名")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"视频"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    
    class CourseResource(models.Model):
        course = models.ForeignKey(Course, verbose_name=u"课程")
        name = models.CharField(max_length=100, verbose_name=u"名称")
        download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name=u"资源文件", max_length=100)
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"课程资源"
            verbose_name_plural = verbose_name
    

    4-6

    微信截图_20171124134942.png
    # _*_ encoding:utf-8 _*_
    from __future__ import unicode_literals
    from datetime import datetime
    
    from django.db import models
    
    # Create your models here.
    
    
    class CityDict(models.Model):
        name = models.CharField(max_length=20, verbose_name=u"城市")
        desc = models.CharField(max_length=200, verbose_name=u"描述")
        add_time = models.DateTimeField(default=datetime.now)
    
        class Meta:
            verbose_name = u"城市"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    
    
    class CourseOrg(models.Model):
        name = models.CharField(max_length=50, verbose_name=u"机构名称")
        desc = models.TextField(verbose_name=u"机构描述")
    
        click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
        fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数")
        image = models.ImageField(upload_to="org/%Y/%m", verbose_name=u"logo", max_length=100)
        address = models.CharField(max_length=150, verbose_name=u"机构地址")
        city = models.ForeignKey(CityDict, verbose_name=u"所在城市")
        add_time = models.DateTimeField(default=datetime.now)
    
        class Meta:
            verbose_name = u"课程机构"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    
    class Teacher(models.Model):
        org = models.ForeignKey(CourseOrg, verbose_name=u"所属机构")
        name = models.CharField(max_length=50, verbose_name=u"教师名")
        work_years = models.IntegerField(default=0, verbose_name=u"工作年限")
        work_company = models.CharField(max_length=50, verbose_name=u"就职公司")
        work_position = models.CharField(max_length=50, verbose_name=u"公司职位")
        points = models.CharField(max_length=50, verbose_name=u"教学特点")
        click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
        fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数")
        age = models.IntegerField(default=18, verbose_name=u"年龄")
        image = models.ImageField(default='', upload_to="teacher/%Y/%m", verbose_name=u"头像", max_length=100)
        add_time = models.DateTimeField(default=datetime.now)
    
        class Meta:
            verbose_name = u"教师"
            verbose_name_plural = verbose_name
    
        def __unicode__(self):
            return self.name
    
    

    4-7 operation models.py设计

    微信截图_20171124140937.png
    1. 创建startapp
    # _*_ encoding:utf-8 _*_
    from __future__ import unicode_literals
    
    from datetime import datetime
    
    from django.db import models
    
    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=u"姓名")
        mobile = models.CharField(max_length=11, verbose_name=u"手机")
        course_name = models.CharField(max_length=50, verbose_name=u"课程名")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"用户咨询"
            verbose_name_plural = verbose_name
    
    
    class CourseComments(models.Model):
        "课程评论"
        user = models.ForeignKey(UserProfile, verbose_name=u"用户")
        course = models.ForeignKey(Course, verbose_name=u"课程")
        comments = models.CharField(max_length=200, verbose_name=u"评论")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"课程评论"
            verbose_name_plural = verbose_name
    
    
    class UserFavorite(models.Model):
        user = models.ForeignKey(UserProfile, verbose_name=u"用户")
        fav_id = models.IntegerField(default=0, verbose_name=u"数据id")
        fav_type = models.IntegerField(choices=((1,"课程"),(2,"课程机构"),(3,"讲师")), default=1, verbose_name=u"收藏类型")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"用户收藏"
            verbose_name_plural = verbose_name
    
    
    class UserMessage(models.Model):
        user = models.IntegerField(default=0, verbose_name=u"接收用户")
        message = models.CharField(max_length=500, verbose_name=u"消息内容")
        has_read = models.BooleanField(default=False, verbose_name=u"是否已读")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"用户消息"
            verbose_name_plural = verbose_name
    
    
    class UserCourse(models.Model):
        user = models.ForeignKey(UserProfile, verbose_name=u"用户")
        course = models.ForeignKey(Course, verbose_name=u"课程")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    
        class Meta:
            verbose_name = u"用户课程"
            verbose_name_plural = verbose_name
    
    
    1. setting,注册app
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'users',
        'courses',
        'operation',
        'organization',
    
    ]
    
    

    4-8

    sourch root

    命令行会报错,在setting中设置

    import sys
    
    # 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'))
    

    欠2图.

    相关文章

      网友评论

          本文标题:Python升级3.6 强力Django+杀手级Xadmin打造

          本文链接:https://www.haomeiwen.com/subject/wuujmxtx.html