Django 千鋒培訓的學習筆記(2)

来源:https://www.cnblogs.com/fengbo1113/archive/2018/03/23/8628261.html
-Advertisement-
Play Games

Django 千鋒培訓讀書筆記 https://www.bilibili.com/video/av17879644/?p=1 切換到創建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject 創建名為project的項目命令 django-admin startp... ...


Django 千鋒培訓讀書筆記
https://www.bilibili.com/video/av17879644/?p=1





切換到創建項目的目錄  cd C:\Users\admin\Desktop\DjangoProject
創建名為project的項目命令  django-admin startproject project
            註:所有路徑不要有中文
            切換到目錄cd C:\Users\admin\Desktop\DjangoProject\project
目錄層級說明:manage.py  一個命令行工具,可以讓我們用多種方式對Django項目進行交互
             __init__.py 一個空文件,它告訴Python這個目錄應該被看做一個包
             settings.py 項目的配置文件(主要處理文件)
             urls.py     項目的url聲明 (主要處理文件)
             wsgi.py     項目與WSGI相容的Web伺服器入口
配置資料庫   Django預設使用SQLite資料庫
            在settings.py文件中通過DATABASES選項進行資料庫配置
配置MySQL    Python3.x中安裝的是PyMySQL
            在__init__.py文件中寫入兩行代碼import pymysql
                                        pymysql.install_as_MySQLdb()
    以資料庫sunck為例進行示範:對settings.py中的DATABASES進行設置
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': "sunck",
                    'USER': "root",
                    'PASSWORD': "admin123",
                    'HOST': "localhost",
                    'PORT': "3306"
                }
            }
創建應用--在一個項目中可以創建多個應用,每個應用進行一種業務處理
        打開CMD,進入project(目錄名)的目錄下,輸入命令創建名為myApp的app:
            python manage.py startapp myAPP
myAPP目錄說明
    admin.py    進行站點配置
    models.py   創建模型
    views.py    創建視圖
激活應用  在settings.py文件中,將myApp應用加入到INSTALLED_APPS選項中
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'myApp',
    ]
定義模型 概述:有一個數據表就對應有一個模型
        在models.py文件中定義模型
            引入:from django.db import models
            模型類要繼承models.Model類
            示例:
                class Grades(models.Model):
                    gname = models.CharField(max_length=20)
                    gdate = models.DateTimeField()
                    ggirlnum = models.IntegerField()
                    gboynum = models.IntegerField()
                    isDelete = models.BooleanField(default=False)

                class Students(models.Model):
                    sname = models.CharField(max_length=20)
                    sgender = models.BooleanField(default=True)
                    sage = models.IntegerField()
                    scontend = models.CharField(max_length=20)
                    isDelete = models.BooleanField(default=False)
                    sgrade = models.ForeignKey("Grades", on_delete=models.CASCADE,)
            說明:
                不需要定義主鍵,在生成時自動添加,並且值為自動增加
在資料庫中生成數據表
    生成遷移文件
        執行 python manage.py makemigrations    在migrations目錄下生成一個遷移文件,此時資料庫中還沒有生成數據表
    執行遷移
        執行 python manage.py migrate           相當於執行MySQL語句創建了數據表

測試數據操作
進入到python shell
    執行 python manage.py shell
引入包
    from myApp.models import Grades, Students
    from django.utils import timezone
    from datetime import *
查詢所有數據
    類名.objects.all()
    示例: Grades.objects.all()
添加數據
    本質:創建一個模型類的對象實例
    示例:CMD視窗下:
        grade1 = Grades()
        grade1.gname = "python04"
        grade1.gdate = datetime(year=2017, month=7, day=17)
        grade1.ggirlnum = 3
        grade1.gboynum = 70
        grade1.save()
查看某個對象
    類名.objects(pk=索引號)
    示例:
        Grades.objects.get(pk=2)
        Grades.objects.all()
修改某個數據
    模型對象屬性 = 新值
    示例:
        grade2.gboynum = 60
        grade2.save()
刪除數據
    模型對象.delete()
    grade2.delete()
    註意:這是物理刪除,資料庫中的相應數據被永久刪除
關聯對象
    示例:
        stu = Students()
        stu.sname = "Xue Yanmei"
        stu.sgender = False
        stu.sage = 20
        stu.scontend = "I am Xue Yanmei"
        stu.sgrade = grade1
        stu.save()
    獲得關聯對象的集合
        需求:獵取python04班級的所有學生
             對象名.關聯的類名小寫_set.all()
             示例:grade1.students_set.all()
        需求:創建曾志偉,屬於python04班級
            示例:
                stu3 = grade1.students_set.create(sname=u'Zhen Zhiwei',sgender=True,scontend=u"I am Zhen Zhiwei",sage=45)
            註意:這樣創建的數據直接被添加到了資料庫當中。
啟動伺服器:
    格式:python manage.py runserver ip:port
    註意:ip可以不寫,不寫代表本機ip
    埠號預設是8000
    python manage.py runserver
    說明:
        這是一個純python編寫的輕量級web伺服器,僅僅在開發測試中使用這個
Admin站點管理:
    概述:
        內容發佈:負責添加,修改,刪除內容的
        公告訪問
    配置Admin應用:
        在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',
        這條預設是添加好的。
    創建管理員用戶:
        在項目目錄下執行 python manage.py createsuperuser
        依次輸入賬號名,郵箱,密碼即可完成用戶創建
    登陸:
        http://127.0.0.1:8000/admin/
    漢化:
        把project\settings.py
        中作如下設定:LANGUAGE_CODE = 'zh-Hans'
                     TIME_ZONE = 'Asia/Shanghai'
管理數據表:
    修改 myAPP\admin.py 如下:
        from django.contrib import admin
        # Register your models here.
        from .models import Grades, Students
        # 註冊
        admin.site.register(Grades)
        admin.site.register(Students)
    自定義管理頁面:
        屬性說明
            # 列表頁屬性
            list_display = [] # 顯示欄位設置
            list_filter = [] # 過濾欄位設置
            search_fields = [] # 搜索欄位設置
            list_per_page = [] # 分頁設置
            # 添加,修改頁屬性
            fields = [] # 規定屬性的先後順序
            fieldsets = [] # 給屬性分組 註意:fields與fieldsets不能同時使用
        屬性示例:
            # 列表頁屬性
            list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
            list_filter = ['gname']
            search_fields = ['gname']
            list_per_page = 5
            # 添加,修改頁屬性
            # fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete']
            fieldsets = [
                ("num",{"fields":['ggirlnum', 'gboynum']}),
                ("base", {"fields":["gname", "gdate", "isDelete"]}),
            ]
        關聯對象:需求:在創建一個班級時可以直接添加幾個學生
            class StudentsInfo(admin.TabularInline):# 可選參數admin.StackedInline
                model = Students
                extra = 2
            class GradesAdmin(admin.ModelAdmin):
                inlines = [StudentsInfo]
        布爾值顯示問題示例:
            class StudentsAdmin(admin.ModelAdmin):
                def gender(self):
                    if self.sgender:
                        return ""
                    else:
                        return ""
                # 設置頁面列的名稱
                gender.short_description = "性別"
                list_display = ['pk', 'sname', 'sage', gender,
                                'scontend', 'sgrade', 'isDelete']
                list_per_page = 10
            admin.site.register(Students, StudentsAdmin)
        執行按鈕位置:
            class StudentsAdmin(admin.ModelAdmin):
                ...snip...
                actions_on_top = False
                actions_on_bottom = True
            admin.site.register(Students, StudentsAdmin)
        使用裝飾器完成註冊:
            @admin.register(Students)
                class StudentsAdmin(admin.ModelAdmin):
                    def gender(self):
                    ...snip...
                    actions_on_top = False
                    actions_on_bottom = True
視圖的基本使用
    概述:
        在Django中,視圖是對web請求進行回應
        視圖就是一個python函數,在views.py文件中定義。
    定義視圖:
        示例:在myApp\views.py中寫入
            from django.shortcuts import render
            # Create your views here.
            from django.http import HttpResponse
            def index(request):
                return HttpResponse("Sunck is a good man")
    配置url:方法一:path方法:
        修改project目錄下的urls.py文件:
            from django.contrib import admin
            from django.urls import path, include
            urlpatterns = [
                path('admin/', admin.site.urls),
                path('', include('myApp.urls')),
            ]
        在myApp應用目錄下創建urls.py文件:
            from django.urls import path, include
            from . import views
            urlpatterns = [
                path('',views.index),
            ]
    配置url:方法二:url方法:
        修改project目錄下的urls.py文件:
            from django.contrib import admin
            from django.conf.urls import url,include
            urlpatterns = [
                url(r'^admin/', admin.site.urls),
                url(r'^', include('myApp.urls')),
            ]
        在myApp應用目錄下創建urls.py文件:
            from django.conf.urls import url
            from . import views
            urlpatterns = [
                url(r'^$', views.index),
            ]
模板的基本使用:
    概述:模板是HTML頁面,可以根據視圖中傳遞過來的數據進行填充
    創建模板:
        創建templates目錄,在目錄下創建對應項目的模板目錄(project/templates/myApp)
    配置模板路徑:
        修改settings.py文件下的TEMPLATES下的'DIRS''DIRS': [os.path.join(BASE_DIR, 'templates')],
    定義grades.html與students.html模板:
        在templates\myApp\目錄下創建grades.html與students.html模板文件
        模板語法:
            {{輸出值,可以是變數,也可以是對象,屬性}}
            {%執行代碼段%}
    http://127.0.0.1:8000/grades
        寫grades.html模板:
            <!doctype html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport"
                      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>班級信息</title>
            </head>
            <body>
                <h1>班級信息列表</h1>
                <ul>
                    <!--[python04, python05, python06]-->
                    {%for grade in grades%}
                    <li>
                        <a href="#">{{grade.gname}}</a>
                    </li>
                    {%endfor%}
                </ul>
            </body>
            </html>
        定義視圖:myApp\views.py
            from .models import Grades
            def grades(request):
                # 去模板里取數據
                gradesList = Grades.objects.all()
                # 將數據傳遞給模板,模板再渲染頁面,將渲染好的頁面返回給瀏覽器
                return render(request, 'myApp/grades.html', {"grades": gradesList})
        配置url:myApp\urls.py
        urlpatterns = [
            url(r'^$', views.index),
            url(r'^(\d+)/(\d+)$', views.detail),
            url(r'^grades/', views.grades)
        ]
    http://127.0.0.1:8000/students
        寫students.html模板
            <!doctype html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport"
                      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>學生頁面</title>
            </head>
            <body>
                <h1>學生信息列表</h1>
                <ul>
                    {%for student in students%}
                    <li>
                        {{student.sname}}--{{student.scontend}}
                    </li>
                    {%endfor%}
                </ul>
            </body>
            </html>
        定義視圖:myApp\views.py
            from .models import Students
            def students(request):
                studentsList = Students.objects.all()
                return render(request, 'myApp/students.html', {"students": studentsList})
        配置url:myApp\urls.py
            urlpatterns = [
            url(r'^$', views.index),
            url(r'^(\d+)/(\d+)$', views.detail),
            url(r'^grades/', views.grades),
            url(r'^students/', views.students),
        ]
    需求:點擊班級,顯示對應班級的學生名字
        運行不正常https://www.bilibili.com/video/av17879644/?p=12






Django流程梳理
    創建工程:執行 django-admin startproject 工程名
    創建項目:執行 python manage.py startapp 項目名稱
    激活項目:修改 settings.py中的INSTALLED_APPS
    配置資料庫:
        修改__init__.py文件
        修改settings.py文件中的DATABASES
    創建模型類:在項目目錄下的models.py文件中創建
    生成遷移文件:執行python manage.py makemigrations
    執行遷移:執行python manage.py migrate
    配置站點:略
    創建模板目錄/項目模板目錄
    在settings.py中的TEMPLATES添加templates路徑
    在工程目錄下(project)修改urls.py
    在項目目錄下創建urls.py


使用他人Django代碼需要的簡易修改:
1.在settings.py中修改資料庫名
2.在settings.py中修改資料庫密碼
3.刪除由內向外文件(在對應目錄里滑鼠右鍵刪除)
4.在資料庫中創建對應第一步的資料庫(自己在SQL中創建)
5.執行生成遷移文件
6.執行遷移
7.啟動服務
8.瀏覽器測試


Django模型
    Django對各種資料庫提供了很好的支持,Django為這些資料庫提供了統一的調用API
    我們可以根據不同的業務需求選擇不同的資料庫。
    配置資料庫
        修改工程目錄下的__init__.py文件
            import pymysql
            pymysql.install_ad_MySQLdb()
        修改settings.py文件中的DATABASES
    開發流程
        配置資料庫
        定義模型類:一個模型都在資料庫中對應一張資料庫表
        生成遷移文件
        執行遷移生成數據表
        使用模型類進行增刪改查
    ORM
        概述:對象-關係-映射
        任務:
            根據對象的類型生成表結構
            將對象,列表的操作轉換成SQL語句
            將SQL語句查詢到的結果轉換為對象,列表
        優點:
            極大的減輕了開發人員的工作量,不需要面對因資料庫的變更而修改代碼的問題
    定義模型
        模型,屬性,表,欄位之間的關係
            一個模型類在資料庫中對應一張表,在模型類中定義的屬性,對應該模型對照表中的一個欄位
        定義屬性:見下文
        創建模型類
        元選項
            在模型類中定義Meta類,用於設置元信息
            示例:
                class Meta:
                    db_table = "students"
                    ordering = ['id']
            db_table
                定義數據表名,推薦用小寫字母,數據表名預設為項目名小寫_類名小寫
            ordering
                對象的預設排序欄位,獲取對象的列表時使用
                示例:
                    ordering['id'] id按升序排列
                    ordering['-id'] id按降序排列
                註意:排序會增加資料庫開銷
    模型成員
        類屬性
            隱藏類屬性objects:
                是Manager類型的一個對象,作用是與資料庫進行交互
                當定義模型類時沒有指定管理器,則Django為模型創建一個名為objects的管理器
            自定義管理器示例:
                定義stuObj管理器:
                    stuObj = models.Manager()
                當為模型指定模型管理器,Django就不再為模型類生成objects模型管理器了。
            自定義管理器Manager類
                模型管理器是Django的模型進行與資料庫交互的視窗,一個模型可以有多個模型管理器
                作用:
                    向管理器類中添加額外的方法
                    修改管理器返回的原始查詢集
                        通常會重寫get_queryset()方法
                代碼示例:
                    class StudentsManager(models.Manager):
                        def get_queryset(self):
                            return super(StudentsManger, self).get_queryset().filter(isDelete=False)

                    class Students(model.Moder):
                        # 自定義模型管理器
                        # 當自定義模型管理器,objects就不存在了
                        stuObj = models.Manger()
                        stuObj2 = StudentsManager()

        創建對象
            目的:向資料庫中添加數據
            當創建對象時,django不會對資料庫進行讀寫操作,當調用save()方法時才與資料庫交互,將對象保存在資料庫表中。
            註意:
                __init__方法已經在父類models.Model中使用,在自定義的模型中無法使用。
            方法:
                在模型類中增加一個類方法,示例如下:
                    class Students(model.Moder):
                        ...snip...
                         @classmethod
                        def createStudent(cls, name, age, gender, contend,
                                          grade,lastT, createT, isD=False):
                            stu = cls(sname=name, sage=age, sgender=gender,
                                        scontend=contend, sgrade=grade, lastTime=lastT, createTime=createT,
                                        isDelete=isD)
                            return stu
                在自定義管理器中添加一個方法,示例如下:
                    class StudentsManager(models.Manager):
                        def get_queryset(self):
                            return super(StudentsManager, self).get_queryset().filter(isDelete=False)
                        def createStudent(self, name, age, gender, contend, grade, lastT, createT, isD=False):
                            stu = self.model()
                            # print(type(grade))
                            stu.sname = name
                            stu.sage = age
                            stu.sgender = gender
                            stu.scontend = contend
                            stu.sgrade = grade
                            stu.lastTime = lastT
                            stu.createTime = createT
                            return stu
        模型查詢
            概述
                查詢集表示從資料庫獲取的對象的集合
                查詢集可以有多個過濾器
                過濾器就是一個函數,基於所給的參數限制查詢集結果
                從SQL角度來說,查詢集和select語句等價,過濾器就像where條件
            查詢集
                在管理器上調用過濾器方法返回查詢集
                查詢集經過過濾器篩選後返回新的查詢集,所以可以寫成鏈式調用
                惰性執行
                    創建查詢集不會帶來任何資料庫的訪問,直到調用資料庫時,才會訪問數據
                直接訪問數據的情況:
                    迭代
                    序列化
                    與if合用
                返回查詢集的方法稱為過濾器
                    all():返回查詢集中的所有數據
                    filter():保留符合條件的數據
                        filter(鍵=值)
                        filter(鍵=值,鍵=值)
                        filter(鍵=值).filter(鍵=值)   且的關係
                    exclude():過濾掉符合條件的
                    order_by():排序
                    values():一條數據就是一個字典,返回一個列表
                    get()
                        返回一個滿足條件的對象
                        註意:
                            如果沒有找到符合條件的對象,會引發模型類.DoesNotExist異常
                            如果找到多個對象,會引發模型類MultipleObjectsReturned異常
                    count():返回查詢集中對象的個數
                    first():返回查詢集中第一個對象
                    last():返回查詢集中最後一個對象
                    exits():判斷查詢集中是否有數據,如果有數據返回 True,否則返回 False.
                限制查詢集
                    查詢集返回列表,可以使用下標的方法進行限制,等同於sql中的limit語句
                    註意:下標不能是負數
                    示例:studentsList = Students.stuObj2.all()[0:5]
                查詢集的緩存
                    概述:
                        每個查詢集都包含一個緩存,來最小化對資料庫的訪問
                        在新建的查詢集中,緩存首次為空,第一次對查詢集求值,會發生數據緩存,Django會將查詢出來的數據做一個緩存,並返回查詢結果。
                        以後的查詢直接使用查詢集的緩存
                欄位查詢
                    概述
                        實現了sql中的where語句,作為方法filter(),exclude(),get()的參數
                        語法:屬性名稱__比較運算符=值
                        外鍵:屬性名稱_id
                        轉義:類似sql中的like語句
                             like有關情況看我哥他%是為了匹配點位,匹配數據中的%使用(where like "\%")
                             filter(sname__contains="%")
                    比較運算符
                        exact:判斷,大小寫敏感
                            filter(isDelete=False)
                        contains:是否包含,大小寫敏感
                            studentsList = Students.stuObj2.filter(sname__contains="")
                        startswith,endswith:以value開頭或結尾,大小寫敏感
                        以上四個在前面加上i,就表示不區分大小寫iexact,icontains,istartswith,iendswith
                        isnull,isnotnull
                            是否為空
                            filter(sname__isnull=False)
                        in:是否包含在範圍內
                        gt大於,gte大於等於,lt小於,lte小於等於
                        year,month,day,week_day,hour,minute,second
                            studentsList = Students.stuObj2.filter(lastTime__year=2017)
                        跨關聯查詢
                            處理join查詢
                                語法:
                                    模型類名__屬性名__比較運算符
                                    # 描述中帶有‘薛延美’這三個字的數據是屬於哪個班級的
                                    grade = Grades.objects.filter(students__scontend__contains='薛延美')
                                    print(grade)
                            查詢快捷pk代表的主鍵
                        聚合函數
                            使用aggregate函數返回聚合函數的值
                            Avg
                            Count
                            Max
                                maxAge = Student.stuObj2.aggregate(Max('sage'))
                                maxAge為最大的sage。
                            Min
                            Sum
                        F對象
                            可以使用模型的A屬性與B屬性進行比較
                            from django.db.models import F,Q
                            def grades1(request):
                                g = Grades.objects.filter(ggirlnum__gt=F('gboynum'))
                                print(g)
                                # [<Grades: python02>,<Grades: python03>]
                                return HttpResponse("OOOOOOOo")
                            支持F對象的算術運算
                                g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)
                        Q對象
                            概述:過濾器的方法的關鍵字參數,條件為And模式
                            需求:進行or查詢
                            解決:使用Q對象
                                def students4(request):
                                    studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))
                                    return render(request, 'myApp/students.html', {"students": studentsList})
                                只有一個Q對象的時候,就是用於正常匹配條件
                                studentsList = Students.stuObj2.filter(~Q(pk__lte=3))
                                ~Q是取反


定義屬性
    概述:
        django根據屬性的類型確定以下信息
            當前選擇的資料庫支持欄位的類型
            渲染管理表單時使用的預設html控制項
            在管理站點最低限度的驗證

        django會為表增加自動增長的主鍵列,每個模型只能有一個主鍵列,如
        果使用選項設置某屬性為主鍵列後,則django不會再生成預設的主鍵列

        屬性命名限制
            遵循標識符規則,且變數不能與Python保留字相同
            由於django的查詢方式,不允許使用連續的下劃線

    庫
        定義屬性時,需要欄位類型,欄位類型被定義在django.db.models.fields目錄下,
        為了方便使用,被導入到django.db.models中

        使用方式
            導入: from django.db import models
            通過 models.Field創建欄位類型的對象,賦值給屬性

    邏輯刪除
        對於重要類型都做邏輯刪除,不做物理刪除,實現方法是定義idDelete屬性,
        類型為BooleanField,預設值為False

    欄位類型
        autoField
            一個根據實際ID自動增長的IntegerField,通常不指定,
            如果不指定,一個主鍵欄位將自動添加到模型中

        CharField(max_length=字元長度)
            字元串,預設的表彰樣式是TextInput

        TextField
            大文本欄位,一般超過4000時使用,預設的表單控制項是Textarea

        IntegerField
            整數

        DecimalField(max_digits=None, decimal_places=None)
            使用Python的Decimal實例表示的十進位浮點數
            參數說明
                DecimalField.max_digits
                    位數總數
                DecimalField.decimal_places
                    小數點後的數字位置

        FloatField
            使用Python的float實例來表示的浮點數

        BooleanField
            True/False 欄位,此欄位的預設表彰控制是CheckboxInput

        NullBooleanField
            支持 Null, True, False 三種值

        DateField([auto_now=False, auto_now_add=False])
            使用Python的datetime.date實例表示的日期
            參數說明:
                DateField.auto_now
                    每次保存對象時,自動設置該欄位為當前時間,用於“最後一次修改”
                    的時間戳,它總是使用當前日期,預設為 False
                DateField.auto_now_add
                    當前對象第一次被創建時自動設置當前時間,用於創建的時間戳,
                    它總是使用當前日期,預設為 False
            說明
                該欄位預設對應的表單控制項是一個TextInput.在管理員站點添加了一個
                JavaScript寫的日曆控制項,和一個“Today”的快捷按鈕,包含了一個額外
                的invalid_date錯誤消息鍵
            註意
                auto_now_add, auto_now, and default 這些設置是相互排斥的,他們之間
                的任何組合將會發生錯誤的結果

        TimeField
            使用Python的datetime.time實例表示的時間,參數同DateField

        DateTimeField
            使用Python的datetime
            datetime實例表示的日期和時間,參數同DateField

        FileField
            一個上傳文件的欄位

        ImageField
            繼承了FileField的所有屬性和方法,但對上傳的對象進行校驗,
            確保它是一個有效的image

    欄位選項
        概述
            通過欄位選項,可以實現對欄位的約束
            在欄位對象中通過關鍵字參數指定

        null
            如果為True,Django將空值以NULL存儲在資料庫中,預設值為 False

        blanke
            如果為True,則該欄位允許為空白,預設值為 False

        註意
            null是資料庫範疇的概念,blank是表彰驗證範疇的概念

        db_column
            欄位的名稱,如果未指定,則使用屬性的名稱

        db_index
            若值為 True,則在表中會為此欄位創建索引

        default
            預設值

        primary_key
            若為 True,則該欄位會成為模型的主鍵欄位

        unique
            如果為 True,這個欄位在表中必須有唯一值

    關係
        分類
            ForeignKey:一對多,將欄位定義在多的端中
            ManyToManyField:多對多,將欄位定義在兩端中
            OneToOneField:一對一,將欄位定義在任意一端中

        用一訪問多
            格式
                對象.模型類小寫_set
            示例
                grade.students_set

        用一訪問一
            格式
                對象.模型類小寫
            示例
                grade.studnets

        訪問id
            格式
                對象.屬性_id
            示例
                student.sgrade_id


視圖
    概述:
        作用:視圖接收web請求,並響應web請求
        本質:視圖就是python中的一個函數
        響應:
            響應過程:
                用戶在瀏覽器中輸入網址www.sunck.wang/sunck/index.html
                ---網址--->
                django獲取網址信息,去掉IP與埠號,網址變成:sunck/index.html
                ---虛擬路徑與文件名--->
                url管理器逐個匹配urlconf,記錄視圖函數
                ---視圖函數名--->
                視圖管理,找到對應的視圖去執行,返回結果給瀏覽器
                ---響應的數據--->
                返回第一步:用戶在瀏覽器中輸入網址
            網頁
                重定向
                錯誤視圖
                    404視圖:找不到網頁(url匹配不成功時返回)時返回
                        在templates目錄下定義404.html
                            <!doctype html>
                            <html lang="en">
                            <head>
                                <meta charset="UTF-8">
                                <meta name="viewport"
                                      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
                                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                                <title>Document</title>
                            </head>
                            <body>
                                <h1>頁面丟失</h1>
                                <h2>{{request_path}}</h2>
                            </body>
                            </html>
                            request_path:導致錯誤的網址
                        配置settings.py
                            DEBUG
                                如果為 True,永遠不會調用404頁面,需要調整為 False 才會顯示
                            ALLOWED_HOSTS = ['*']
                    500視圖:在視圖代碼中出現錯誤(伺服器代碼錯誤)
                    400視圖:錯誤出現在客戶的操作
            JSON數據
    url配置
        配置流程:
            制定根級url配置文件
                settings.py文件中的ROOT_URLCONF
                ROOT_URLCONF = 'project.urls'
                預設實現了
            urlpatterns
                一個url實例的列表
                url對象
                    正則表達式
                    視圖名稱
                    名稱
            url匹配正則的註意事項
                如果想要從url中獲取一個值,需要對正則加小括弧
                匹配正則前方不需要加'/'
                正則前需要加'r'表示字元串不轉義
        引入其他url配置
            在應用中創建urls.py文件,定義本應用的url配置,在工程urls.py中使用include方法
                project\urls.py
                from django.contrib import admin
                from django.conf.urls import url,include
                urlpatterns = [
                    url(r'^admin/', admin.site.urls),
                    url(r'^', include('myApp.urls', namespace="myAPP")),
                ]
                myApp\urls.py
                from django.urls import path, include
                from django.conf.urls import url
                from . import views
                urlpatterns = [
                    url(r'^$', views.index, name="index"),
                ]
        url的反向解析
            概述:如果在視圖,模板中使用了硬編碼鏈接,在url配置發生改變時,動態生成鏈接的地址
            解決:在使用鏈接時,通過url配置的名稱,動態生成url地址
            作用:使用url模板
    視圖函數
        定義視圖:
            本質:一個函數
            視圖參數:
                一個HttpRequest的實例
                通過正則表達式獲取的參數
            位置:一般在views.py文件下定義
    HttpRequest對象
        概述:
            伺服器接收http請求後,會根據報文創建HttpRequest對象
            視圖的第一個參數就是HttpRequest對象
            django創建的,之後調用視圖時傳遞給視圖
        屬性
            path:請求的完整路徑(不包括功能變數名稱和埠)
            method:表示請求的方式,常用的有GET,POST
            encoding:表示瀏覽器提交的數據的編碼方式,一般為utf-8
            GET:類似於字典的對象,包含了get請求的所有參數
            POST:類似於字典的對象,包含了post請求的所有參數
            FILES:類似字典的對象,包含了所有上傳的文件
            COOKIES:字典,包含所有的cookie
            session:類似字典的對象,表示當前會話
        方法
            is_ajax():如果是通過XMLHttpRequest發起的,返回 True
        QueryDict對象
            request對象中的GET,POST都屬於QueryDict對象
            方法:
                get():
                    根據鍵獲取值,只能獲取一個值
                    www.sunck.wang/abc?a=1&b=2&c=3
                getlist()
                    將鍵的值以列表的形式返回
                    可以獲取多個值
                    www.sunck.wang/abc?a=1&b=2&c=3
        GET屬性
            獲取瀏覽器傳遞過來數據
            www.sunck.wang/abc?a=1&b=2&c=3
            urls.py
            url(r'^get1', views.get1),   #結尾不能加$,否則無法匹配
            views.py
            def get1(request):
                a = request.GET.get('a')
                b = request.GET.get('b')
                c = request.GET.get('<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 模塊是一門語言編寫大項目的基石,因此,瞭解如何組織、編寫、編譯、載入模塊很重要。這裡主要談談Node中的模塊載入。 1.Node中的模塊,主要使用require來載入模塊,文件 require("./") 載入本文件夾下麵的package.json,如果沒有,則載入index.js、index.no ...
  • 複製即可使用,頁面開發必備 ...
  • 這個問題在其他瀏覽器都不會出現,唯獨IE不行,搜遍了百度以及各大論壇網站,都找不到這個問題的解決方案,只好自己整了。 造成這個問題的原因很簡單,就是剛開始的滾動條我用的是iframe的滾動條,iframe中的頁面內容高度超過iframe高度後就會出現滾動條,在正常視窗能夠出現滾動條,但是全屏模式下就 ...
  • 盒子模型是相對於塊級元素而言的。 什麼是塊級元素,具有margin,padding等屬性,能夠改變大小的的元素。這裡就提出一個問題,各種元素之間的區別和聯繫? 盒子模型的主要屬性 width、height、padding、border、margin margin-left ,margin-right ...
  • 模式定義 動態的將新功能附加到對象上,在對象功能擴展方面,它比繼承更有彈性。 設計原則 多用組合,少用繼承 類應設計的對擴展開放,對修改關閉。 ...
  • 這兩天看了《移山之道:VSTS軟體開髮指南》,對團隊軟體開發又有了新的認識。也許對於我們這些軟體開發的新手來說,最重要的是具體技術與應用框架,但讀了這本書後我感覺到,實際團隊項目中工具的使用是次要的,更重要的在於對人員的控制,如何高效得讓一個團隊各司其職、彼此之間在充分信息交流的基礎上協同工作才是一 ...
  • 目的描述:全新的騰訊雲Linux伺服器,系統是ubuntu 16.04。需要在上面安裝mysql資料庫。 使用XShell遠程登錄,在終端視窗中使用sudo apt-get 指令線上安裝mysql。 在安裝MySql之前先執行更新指令: 效果圖如下: 接著執行安裝MySql指令: 這時候系統會去下載 ...
  • 一、前言 最近有點想弄一個站內搜索的功能,之前學過了Lucene,後來又聽過Solr這個名詞。接著在瞭解全文搜索的時候就發現了Elasticsearch這個,他也是以Lucene為基礎的。 我去搜了幾篇Elasticsearch教程,發現很多都是基於linux的,但我linux耍得並不熟,很少用。僅 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...