溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中Django設(shè)計(jì)的示例分析

發(fā)布時(shí)間:2022-03-04 15:02:18 來(lái)源:億速云 閱讀:136 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“Python中Django設(shè)計(jì)的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python中Django設(shè)計(jì)的示例分析”這篇文章吧。

    django設(shè)計(jì)

    user-用戶管理
    curser-課程管理
    organization-機(jī)構(gòu)和教師管理

    數(shù)據(jù)表生成與修改各APP models設(shè)計(jì)

    users models 設(shè)計(jì)

    修改users目錄下的models

    # _*_ 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):
        # verbose_name:備注
        # blank:是否可以為空
        #
        nick_name = models.CharField(max_length=50,verbose_name=u"昵稱",default="")
        birthday = models.DateField(verbose_name=u"生日",blank=True)
        gender = models.CharField(choices=(('male',u'男'),('female',u'女')),default="female",max_length=6)
        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 = u"用戶信息"
            verbose_name_plural = verbose_name
        def __unicode__(self):
            return self.username
    class EmailVerifyRecord(models.Model):
        code = models.CharField(max_length=20,verbose_name=u"驗(yàn)證碼")
        email = models.EmailField(max_length=50,verbose_name=u"郵箱")
        send_type = models.CharField(max_length=10,choices=(("register",u"注冊(cè)"),("forget",u"找回密碼")),)
        send_time = models.DateTimeField(default=datetime.now(),verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"郵箱驗(yàn)證碼"
            verbose_name_plural = verbose_name
    class Banner(models.Model):
        title = models.CharField(max_length=100,verbose_name=u"標(biāo)題")
        image = models.ImageField(max_length=100,upload_to="banner/%Y/%m",verbose_name=u"輪播圖")
        url = models.URLField(max_length=100,verbose_name=u"訪問(wèn)地址")
        index = models.IntegerField(verbose_name=u"順序",default=100)
        add_time = models.DateTimeField(default=datetime.now(),verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"輪播圖"
            verbose_name_plural = verbose_name

    修改配置文件setting.py中的INSTALLED_APPS,將我們的app users加入,添加AUTH_USER_MODEL = “users.UserProfile”

    INSTALLED_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"

    運(yùn)行python manage.py runserver 0.0.0.0:9000

    Python中Django設(shè)計(jì)的示例分析

    Python中Django設(shè)計(jì)的示例分析

    Python中Django設(shè)計(jì)的示例分析

    解決問(wèn)題:
    pip3 install Pillow(安裝Pillow包)

    Python中Django設(shè)計(jì)的示例分析

    python manage.py makemigrations users
    python manage.py migrate users

    Python中Django設(shè)計(jì)的示例分析

    解決users.0001_initial,將配置文件中的INSTALLED_APPS中的django.contrib.admin注釋掉

    Python中Django設(shè)計(jì)的示例分析

    course models 設(shè)計(jì)

    修改course 目錄下的models

    # _*_ 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(max_length=2,choices=(('cj','初級(jí)'),('zj','中級(jí)'),('gj','高級(jí)')))
        learn_time = models.IntegerField(default=0,verbose_name=u"學(xué)習(xí)時(shí)長(zhǎng)")
        students = models.IntegerField(default=0,verbose_name=u"學(xué)習(xí)人數(shù)")
        fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人數(shù)")
        image = models.ImageField(max_length=100,verbose_name="封面圖片",upload_to="courses/%Y/%m")
        click_nums = models.IntegerField(default=0,verbose_name=u"點(diǎn)擊數(shù)")
        add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"課程"
            verbose_name_plural = verbose_name
    class Lesson(models.Model):
        course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)
        name = models.CharField(max_length=100,verbose_name=u"章節(jié)名")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"章節(jié)"
            verbose_name_plural = verbose_name
    class Video(models.Model):
        lesson = models.ForeignKey(Lesson,verbose_name=u"章節(jié)",on_delete=models.CASCADE)
        name = models.CharField(max_length=100, verbose_name=u"視頻名")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"視頻"
            verbose_name_plural = verbose_name
    class CourseResource(models.Model):
        course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE)
        name = models.CharField(max_length=100, verbose_name=u"名稱")
        download = models.FileField(upload_to="course/recourse/%Y/%m",verbose_name=u"資源文件",
                                    max_length=100)
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"課程資源"
            verbose_name_plural = verbose_name

    修改配置文件setting.py中的INSTALLED_APPS,將我們的app course加入

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'users',
        'course',
    ]

    運(yùn)行python manage.py runserver 0.0.0.0:9000

    Python中Django設(shè)計(jì)的示例分析

    原因

    在django2.0后,定義外鍵和一對(duì)一關(guān)系的時(shí)候需要加on_delete選項(xiàng),此參數(shù)為了避免兩個(gè)表里的數(shù)據(jù)不一致問(wèn)題,不然會(huì)報(bào)錯(cuò):

    TypeError: init() missing 1 required positional argument: ‘on_delete'

    涉及到外鍵都需要改成

    course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)

    Python中Django設(shè)計(jì)的示例分析

    organization models 設(shè)計(jì)

    修改organization目錄下的models

    # _*_ 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, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"城市"
            verbose_name_plural = verbose_name
    class CourseOrg(models.Model):
        name = models.CharField(max_length=50,verbose_name=u"機(jī)構(gòu)名稱")
        desc = models.TextField(verbose_name=u"機(jī)構(gòu)描述")
        click_nums = models.IntegerField(default=0,verbose_name=u"點(diǎn)擊數(shù)")
        fav_nums = models.IntegerField(default=0,verbose_name=u"收藏?cái)?shù)")
        image = models.ImageField(upload_to="org/%Y/%m",verbose_name=u"封面圖",max_length=100)
        address = models.CharField(max_length=150,verbose_name=u"機(jī)構(gòu)地址")
        city = models.ForeignKey(CityDict,verbose_name=u"所在城市",on_delete=models.CASCADE)
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"課程機(jī)構(gòu)"
            verbose_name_plural = verbose_name
    class Teacher(models.Model):
        org = models.ForeignKey(CourseOrg,verbose_name=u"所屬機(jī)構(gòu)",on_delete=models.CASCADE)
        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"教學(xué)特點(diǎn)")
        click_nums = models.IntegerField(default=0, verbose_name=u"點(diǎn)擊數(shù)")
        fav_nums = models.IntegerField(default=0, verbose_name=u"收藏?cái)?shù)")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"教師"
            verbose_name_plural = verbose_name

    修改配置文件setting.py中的INSTALLED_APPS,將我們的app organization加入

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'users',
        'course',
        'organization',	
    ]

    operation models 設(shè)計(jì)

    # _*_ encoding:utf-8 _*_from __future__ import unicode_literalsfrom datetime import datetimefrom django.db import modelsfrom users.models import UserProfilefrom course.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"手機(jī)")    course_name = models.CharField(max_length=50,verbose_name=u"課程名")    add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加時(shí)間")    class Meta:        verbose_name = u"用戶咨詢"        verbose_name_plural = verbose_nameclass CourseComments(models.Model):    # 課程評(píng)論    user = models.ForeignKey(UserProfile,verbose_name=u"用戶",on_delete=models.CASCADE)    course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)    comments = models.CharField(max_length=200,verbose_name=u"評(píng)論")    add_time = models.DateTimeField(default=datetime.now,verbose_name=u"評(píng)論時(shí)間")    class Meta:        verbose_name = u"課程評(píng)論"        verbose_name_plural = verbose_nameclass UserFavorite(models.Model):    user = models.ForeignKey(UserProfile,verbose_name=u"用戶",on_delete=models.CASCADE)    fav_id = models.IntegerField(default=0,verbose_name=u"數(shù)據(jù)id")    fav_type = models.IntegerField(choices=((1,'課程'),(2,'課程機(jī)構(gòu)'),(3,'講師')),default=1,                                   verbose_name=u"收藏類型")    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"收藏時(shí)間")    class Meta:        verbose_name = u"用戶收藏"        verbose_name_plural = verbose_nameclass UserMessage(models.Model):    user = models.ForeignKey(UserProfile, verbose_name=u"接收用戶",on_delete=models.CASCADE)    message = models.CharField(max_length=500,verbose_name=u"消息內(nèi)容")    has_read = models.BooleanField(default=False,verbose_name=u"是否已讀")    add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加時(shí)間")    class Meta:        verbose_name = u"用戶信息"        verbose_name_plural = verbose_nameclass UserCourse(models.Model):    user = models.ForeignKey(UserProfile, verbose_name=u"用戶",on_delete=models.CASCADE)    course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE)    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")    class Meta:        verbose_name = u"用戶課程"        verbose_name_plural = verbose_name

    修改配置文件setting.py中的INSTALLED_APPS,將我們的app operation加入

    # _*_ encoding:utf-8 _*_
    from __future__ import unicode_literals
    from datetime import datetime
    from django.db import models
    from users.models import UserProfile
    from course.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"手機(jī)")
        course_name = models.CharField(max_length=50,verbose_name=u"課程名")
        add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"用戶咨詢"
            verbose_name_plural = verbose_name
    class CourseComments(models.Model):
        # 課程評(píng)論
        user = models.ForeignKey(UserProfile,verbose_name=u"用戶",on_delete=models.CASCADE)
        course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)
        comments = models.CharField(max_length=200,verbose_name=u"評(píng)論")
        add_time = models.DateTimeField(default=datetime.now,verbose_name=u"評(píng)論時(shí)間")
        class Meta:
            verbose_name = u"課程評(píng)論"
            verbose_name_plural = verbose_name
    class UserFavorite(models.Model):
        user = models.ForeignKey(UserProfile,verbose_name=u"用戶",on_delete=models.CASCADE)
        fav_id = models.IntegerField(default=0,verbose_name=u"數(shù)據(jù)id")
        fav_type = models.IntegerField(choices=((1,'課程'),(2,'課程機(jī)構(gòu)'),(3,'講師')),default=1,
                                       verbose_name=u"收藏類型")
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"收藏時(shí)間")
        class Meta:
            verbose_name = u"用戶收藏"
            verbose_name_plural = verbose_name
    class UserMessage(models.Model):
        user = models.ForeignKey(UserProfile, verbose_name=u"接收用戶",on_delete=models.CASCADE)
        message = models.CharField(max_length=500,verbose_name=u"消息內(nèi)容")
        has_read = models.BooleanField(default=False,verbose_name=u"是否已讀")
        add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"用戶信息"
            verbose_name_plural = verbose_name
    class UserCourse(models.Model):
        user = models.ForeignKey(UserProfile, verbose_name=u"用戶",on_delete=models.CASCADE)
        course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE)
        add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時(shí)間")
        class Meta:
            verbose_name = u"用戶課程"
            verbose_name_plural = verbose_name

    將4個(gè)app統(tǒng)一放到apps包下

    因?yàn)閍pp太多,不好管理,所以統(tǒng)一放到apps目錄下進(jìn)行管理

    將app路徑寫入到配置文件setting.py中,防止包導(dǎo)入失敗

    import os
    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'))

    Python中Django設(shè)計(jì)的示例分析

    python manage.py makemigrations
    python manage.py migrate
    生成數(shù)據(jù)表

    Python中Django設(shè)計(jì)的示例分析

    > 運(yùn)行python manage.py runserver 0.0.0.0:9000

    Python中Django設(shè)計(jì)的示例分析

    以上是“Python中Django設(shè)計(jì)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI