免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Django 千鋒培訓(xùn)的學(xué)習(xí)筆記(1)
Django 千鋒培訓(xùn)讀書筆記https://www.bilibili.com/video/av17879644/?p=1切換到創(chuàng)建項(xiàng)目的目錄  cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為project的項(xiàng)目命令  django-admin startproject project            注:所有路徑不要有中文            切換到目錄cd C:\Users\admin\Desktop\DjangoProject\project目錄層級(jí)說明:manage.py  一個(gè)命令行工具,可以讓我們用多種方式對(duì)Django項(xiàng)目進(jìn)行交互             __init__.py 一個(gè)空文件,它告訴Python這個(gè)目錄應(yīng)該被看做一個(gè)包             settings.py 項(xiàng)目的配置文件(主要處理文件)             urls.py     項(xiàng)目的url聲明 (主要處理文件)             wsgi.py     項(xiàng)目與WSGI兼容的Web服務(wù)器入口配置數(shù)據(jù)庫   Django默認(rèn)使用SQLite數(shù)據(jù)庫            在settings.py文件中通過DATABASES選項(xiàng)進(jìn)行數(shù)據(jù)庫配置配置MySQL    Python3.x中安裝的是PyMySQL            在__init__.py文件中寫入兩行代碼import pymysql                                        pymysql.install_as_MySQLdb()    以數(shù)據(jù)庫sunck為例進(jìn)行示范:對(duì)settings.py中的DATABASES進(jìn)行設(shè)置            DATABASES = {                'default': {                    'ENGINE': 'django.db.backends.mysql',                    'NAME': "sunck",                    'USER': "root",                    'PASSWORD': "admin123",                    'HOST': "localhost",                    'PORT': "3306"                }            }創(chuàng)建應(yīng)用--在一個(gè)項(xiàng)目中可以創(chuàng)建多個(gè)應(yīng)用,每個(gè)應(yīng)用進(jìn)行一種業(yè)務(wù)處理        打開CMD,進(jìn)入project(目錄名)的目錄下,輸入命令創(chuàng)建名為myApp的app:            python manage.py startapp myAPPmyAPP目錄說明    admin.py    進(jìn)行站點(diǎn)配置    models.py   創(chuàng)建模型    views.py    創(chuàng)建視圖激活應(yīng)用  在settings.py文件中,將myApp應(yīng)用加入到INSTALLED_APPS選項(xiàng)中    INSTALLED_APPS = [        'django.contrib.admin',        'django.contrib.auth',        'django.contrib.contenttypes',        'django.contrib.sessions',        'django.contrib.messages',        'django.contrib.staticfiles',        'myApp',    ]定義模型 概述:有一個(gè)數(shù)據(jù)表就對(duì)應(yīng)有一個(gè)模型        在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,)            說明:                不需要定義主鍵,在生成時(shí)自動(dòng)添加,并且值為自動(dòng)增加在數(shù)據(jù)庫中生成數(shù)據(jù)表    生成遷移文件        執(zhí)行 python manage.py makemigrations    在migrations目錄下生成一個(gè)遷移文件,此時(shí)數(shù)據(jù)庫中還沒有生成數(shù)據(jù)表    執(zhí)行遷移        執(zhí)行 python manage.py migrate           相當(dāng)于執(zhí)行MySQL語句創(chuàng)建了數(shù)據(jù)表測(cè)試數(shù)據(jù)操作進(jìn)入到python shell    執(zhí)行 python manage.py shell引入包    from myApp.models import Grades, Students    from django.utils import timezone    from datetime import *查詢所有數(shù)據(jù)    類名.objects.all()    示例: Grades.objects.all()添加數(shù)據(jù)    本質(zhì):創(chuàng)建一個(gè)模型類的對(duì)象實(shí)例    示例:CMD窗口下:        grade1 = Grades()        grade1.gname = "python04"        grade1.gdate = datetime(year=2017, month=7, day=17)        grade1.ggirlnum = 3        grade1.gboynum = 70        grade1.save()查看某個(gè)對(duì)象    類名.objects(pk=索引號(hào))    示例:        Grades.objects.get(pk=2)        Grades.objects.all()修改某個(gè)數(shù)據(jù)    模型對(duì)象屬性 = 新值    示例:        grade2.gboynum = 60        grade2.save()刪除數(shù)據(jù)    模型對(duì)象.delete()    grade2.delete()    注意:這是物理刪除,數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù)被永久刪除關(guān)聯(lián)對(duì)象    示例:        stu = Students()        stu.sname = "Xue Yanmei"        stu.sgender = False        stu.sage = 20        stu.scontend = "I am Xue Yanmei"        stu.sgrade = grade1        stu.save()    獲得關(guān)聯(lián)對(duì)象的集合        需求:獵取python04班級(jí)的所有學(xué)生             對(duì)象名.關(guān)聯(lián)的類名小寫_set.all()             示例:grade1.students_set.all()        需求:創(chuàng)建曾志偉,屬于python04班級(jí)            示例:                stu3 = grade1.students_set.create(sname=u'Zhen Zhiwei',sgender=True,scontend=u"I am Zhen Zhiwei",sage=45)            注意:這樣創(chuàng)建的數(shù)據(jù)直接被添加到了數(shù)據(jù)庫當(dāng)中。啟動(dòng)服務(wù)器:    格式:python manage.py runserver ip:port    注意:ip可以不寫,不寫代表本機(jī)ip    端口號(hào)默認(rèn)是8000    python manage.py runserver    說明:        這是一個(gè)純python編寫的輕量級(jí)web服務(wù)器,僅僅在開發(fā)測(cè)試中使用這個(gè)Admin站點(diǎn)管理:    概述:        內(nèi)容發(fā)布:負(fù)責(zé)添加,修改,刪除內(nèi)容的        公告訪問    配置Admin應(yīng)用:        在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',        這條默認(rèn)是添加好的。    創(chuàng)建管理員用戶:        在項(xiàng)目目錄下執(zhí)行 python manage.py createsuperuser        依次輸入賬號(hào)名,郵箱,密碼即可完成用戶創(chuàng)建    登陸:        http://127.0.0.1:8000/admin/    漢化:        把project\settings.py        中作如下設(shè)定:LANGUAGE_CODE = 'zh-Hans'                     TIME_ZONE = 'Asia/Shanghai'管理數(shù)據(jù)表:    修改 myAPP\admin.py 如下:        from django.contrib import admin        # Register your models here.        from .models import Grades, Students        # 注冊(cè)        admin.site.register(Grades)        admin.site.register(Students)    自定義管理頁面:        屬性說明            # 列表頁屬性            list_display = [] # 顯示字段設(shè)置            list_filter = [] # 過濾字段設(shè)置            search_fields = [] # 搜索字段設(shè)置            list_per_page = [] # 分頁設(shè)置            # 添加,修改頁屬性            fields = [] # 規(guī)定屬性的先后順序            fieldsets = [] # 給屬性分組 注意:fields與fieldsets不能同時(shí)使用        屬性示例:            # 列表頁屬性            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"]}),            ]        關(guān)聯(lián)對(duì)象:需求:在創(chuàng)建一個(gè)班級(jí)時(shí)可以直接添加幾個(gè)學(xué)生            class StudentsInfo(admin.TabularInline):# 可選參數(shù)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 ""                # 設(shè)置頁面列的名稱                gender.short_description = "性別"                list_display = ['pk', 'sname', 'sage', gender,                                'scontend', 'sgrade', 'isDelete']                list_per_page = 10            admin.site.register(Students, StudentsAdmin)        執(zhí)行按鈕位置:            class StudentsAdmin(admin.ModelAdmin):                ...snip...                actions_on_top = False                actions_on_bottom = True            admin.site.register(Students, StudentsAdmin)        使用裝飾器完成注冊(cè):            @admin.register(Students)                class StudentsAdmin(admin.ModelAdmin):                    def gender(self):                    ...snip...                    actions_on_top = False                    actions_on_bottom = True視圖的基本使用    概述:        在Django中,視圖是對(duì)web請(qǐng)求進(jìn)行回應(yīng)        視圖就是一個(gè)python函數(shù),在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應(yīng)用目錄下創(chuàng)建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應(yīng)用目錄下創(chuàng)建urls.py文件:            from django.conf.urls import url            from . import views            urlpatterns = [                url(r'^$', views.index),            ]模板的基本使用:    概述:模板是HTML頁面,可以根據(jù)視圖中傳遞過來的數(shù)據(jù)進(jìn)行填充    創(chuàng)建模板:        創(chuàng)建templates目錄,在目錄下創(chuàng)建對(duì)應(yīng)項(xiàng)目的模板目錄(project/templates/myApp)    配置模板路徑:        修改settings.py文件下的TEMPLATES下的'DIRS''DIRS': [os.path.join(BASE_DIR, 'templates')],    定義grades.html與students.html模板:        在templates\myApp\目錄下創(chuàng)建grades.html與students.html模板文件        模板語法:            {{輸出值,可以是變量,也可以是對(duì)象,屬性}}            {%執(zhí)行代碼段%}    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>班級(jí)信息</title>            </head>            <body>                <h1>班級(jí)信息列表</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):                # 去模板里取數(shù)據(jù)                gradesList = Grades.objects.all()                # 將數(shù)據(jù)傳遞給模板,模板再渲染頁面,將渲染好的頁面返回給瀏覽器                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>學(xué)生頁面</title>            </head>            <body>                <h1>學(xué)生信息列表</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),        ]    需求:點(diǎn)擊班級(jí),顯示對(duì)應(yīng)班級(jí)的學(xué)生名字        運(yùn)行不正常https://www.bilibili.com/video/av17879644/?p=12Django流程梳理    創(chuàng)建工程:執(zhí)行 django-admin startproject 工程名    創(chuàng)建項(xiàng)目:執(zhí)行 python manage.py startapp 項(xiàng)目名稱    激活項(xiàng)目:修改 settings.py中的INSTALLED_APPS    配置數(shù)據(jù)庫:        修改__init__.py文件        修改settings.py文件中的DATABASES    創(chuàng)建模型類:在項(xiàng)目目錄下的models.py文件中創(chuàng)建    生成遷移文件:執(zhí)行python manage.py makemigrations    執(zhí)行遷移:執(zhí)行python manage.py migrate    配置站點(diǎn):略    創(chuàng)建模板目錄/項(xiàng)目模板目錄    在settings.py中的TEMPLATES添加templates路徑    在工程目錄下(project)修改urls.py    在項(xiàng)目目錄下創(chuàng)建urls.py使用他人Django代碼需要的簡易修改:1.在settings.py中修改數(shù)據(jù)庫名2.在settings.py中修改數(shù)據(jù)庫密碼3.刪除由內(nèi)向外文件(在對(duì)應(yīng)目錄里鼠標(biāo)右鍵刪除)4.在數(shù)據(jù)庫中創(chuàng)建對(duì)應(yīng)第一步的數(shù)據(jù)庫(自己在SQL中創(chuàng)建)5.執(zhí)行生成遷移文件6.執(zhí)行遷移7.啟動(dòng)服務(wù)8.瀏覽器測(cè)試Django模型    Django對(duì)各種數(shù)據(jù)庫提供了很好的支持,Django為這些數(shù)據(jù)庫提供了統(tǒng)一的調(diào)用API    我們可以根據(jù)不同的業(yè)務(wù)需求選擇不同的數(shù)據(jù)庫。    配置數(shù)據(jù)庫        修改工程目錄下的__init__.py文件            import pymysql            pymysql.install_ad_MySQLdb()        修改settings.py文件中的DATABASES    開發(fā)流程        配置數(shù)據(jù)庫        定義模型類:一個(gè)模型都在數(shù)據(jù)庫中對(duì)應(yīng)一張數(shù)據(jù)庫表        生成遷移文件        執(zhí)行遷移生成數(shù)據(jù)表        使用模型類進(jìn)行增刪改查    ORM        概述:對(duì)象-關(guān)系-映射        任務(wù):            根據(jù)對(duì)象的類型生成表結(jié)構(gòu)            將對(duì)象,列表的操作轉(zhuǎn)換成SQL語句            將SQL語句查詢到的結(jié)果轉(zhuǎn)換為對(duì)象,列表        優(yōu)點(diǎn):            極大的減輕了開發(fā)人員的工作量,不需要面對(duì)因數(shù)據(jù)庫的變更而修改代碼的問題    定義模型        模型,屬性,表,字段之間的關(guān)系            一個(gè)模型類在數(shù)據(jù)庫中對(duì)應(yīng)一張表,在模型類中定義的屬性,對(duì)應(yīng)該模型對(duì)照表中的一個(gè)字段        定義屬性:見下文        創(chuàng)建模型類        元選項(xiàng)            在模型類中定義Meta類,用于設(shè)置元信息            示例:                class Meta:                    db_table = "students"                    ordering = ['id']            db_table                定義數(shù)據(jù)表名,推薦用小寫字母,數(shù)據(jù)表名默認(rèn)為項(xiàng)目名小寫_類名小寫            ordering                對(duì)象的默認(rèn)排序字段,獲取對(duì)象的列表時(shí)使用                示例:                    ordering['id'] id按升序排列                    ordering['-id'] id按降序排列                注意:排序會(huì)增加數(shù)據(jù)庫開銷    模型成員        類屬性            隱藏類屬性objects:                是Manager類型的一個(gè)對(duì)象,作用是與數(shù)據(jù)庫進(jìn)行交互                當(dāng)定義模型類時(shí)沒有指定管理器,則Django為模型創(chuàng)建一個(gè)名為objects的管理器            自定義管理器示例:                定義stuObj管理器:                    stuObj = models.Manager()                當(dāng)為模型指定模型管理器,Django就不再為模型類生成objects模型管理器了。            自定義管理器Manager類                模型管理器是Django的模型進(jìn)行與數(shù)據(jù)庫交互的窗口,一個(gè)模型可以有多個(gè)模型管理器                作用:                    向管理器類中添加額外的方法                    修改管理器返回的原始查詢集                        通常會(huì)重寫get_queryset()方法                代碼示例:                    class StudentsManager(models.Manager):                        def get_queryset(self):                            return super(StudentsManger, self).get_queryset().filter(isDelete=False)                    class Students(model.Moder):                        # 自定義模型管理器                        # 當(dāng)自定義模型管理器,objects就不存在了                        stuObj = models.Manger()                        stuObj2 = StudentsManager()        創(chuàng)建對(duì)象            目的:向數(shù)據(jù)庫中添加數(shù)據(jù)            當(dāng)創(chuàng)建對(duì)象時(shí),django不會(huì)對(duì)數(shù)據(jù)庫進(jìn)行讀寫操作,當(dāng)調(diào)用save()方法時(shí)才與數(shù)據(jù)庫交互,將對(duì)象保存在數(shù)據(jù)庫表中。            注意:                __init__方法已經(jīng)在父類models.Model中使用,在自定義的模型中無法使用。            方法:                在模型類中增加一個(gè)類方法,示例如下:                    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                在自定義管理器中添加一個(gè)方法,示例如下:                    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        模型查詢            概述                查詢集表示從數(shù)據(jù)庫獲取的對(duì)象的集合                查詢集可以有多個(gè)過濾器                過濾器就是一個(gè)函數(shù),基于所給的參數(shù)限制查詢集結(jié)果                從SQL角度來說,查詢集和select語句等價(jià),過濾器就像where條件            查詢集                在管理器上調(diào)用過濾器方法返回查詢集                查詢集經(jīng)過過濾器篩選后返回新的查詢集,所以可以寫成鏈?zhǔn)秸{(diào)用                惰性執(zhí)行                    創(chuàng)建查詢集不會(huì)帶來任何數(shù)據(jù)庫的訪問,直到調(diào)用數(shù)據(jù)庫時(shí),才會(huì)訪問數(shù)據(jù)                直接訪問數(shù)據(jù)的情況:                    迭代                    序列化                    與if合用                返回查詢集的方法稱為過濾器                    all():返回查詢集中的所有數(shù)據(jù)                    filter():保留符合條件的數(shù)據(jù)                        filter(鍵=值)                        filter(鍵=值,鍵=值)                        filter(鍵=值).filter(鍵=值)   且的關(guān)系                    exclude():過濾掉符合條件的                    order_by():排序                    values():一條數(shù)據(jù)就是一個(gè)字典,返回一個(gè)列表                    get()                        返回一個(gè)滿足條件的對(duì)象                        注意:                            如果沒有找到符合條件的對(duì)象,會(huì)引發(fā)模型類.DoesNotExist異常                            如果找到多個(gè)對(duì)象,會(huì)引發(fā)模型類MultipleObjectsReturned異常                    count():返回查詢集中對(duì)象的個(gè)數(shù)                    first():返回查詢集中第一個(gè)對(duì)象                    last():返回查詢集中最后一個(gè)對(duì)象                    exits():判斷查詢集中是否有數(shù)據(jù),如果有數(shù)據(jù)返回 True,否則返回 False.                限制查詢集                    查詢集返回列表,可以使用下標(biāo)的方法進(jìn)行限制,等同于sql中的limit語句                    注意:下標(biāo)不能是負(fù)數(shù)                    示例:studentsList = Students.stuObj2.all()[0:5]                查詢集的緩存                    概述:                        每個(gè)查詢集都包含一個(gè)緩存,來最小化對(duì)數(shù)據(jù)庫的訪問                        在新建的查詢集中,緩存首次為空,第一次對(duì)查詢集求值,會(huì)發(fā)生數(shù)據(jù)緩存,Django會(huì)將查詢出來的數(shù)據(jù)做一個(gè)緩存,并返回查詢結(jié)果。                        以后的查詢直接使用查詢集的緩存                字段查詢                    概述                        實(shí)現(xiàn)了sql中的where語句,作為方法filter(),exclude(),get()的參數(shù)                        語法:屬性名稱__比較運(yùn)算符=值                        外鍵:屬性名稱_id                        轉(zhuǎn)義:類似sql中的like語句                             like有關(guān)情況看我哥他%是為了匹配點(diǎn)位,匹配數(shù)據(jù)中的%使用(where like "\%")                             filter(sname__contains="%")                    比較運(yùn)算符                        exact:判斷,大小寫敏感                            filter(isDelete=False)                        contains:是否包含,大小寫敏感                            studentsList = Students.stuObj2.filter(sname__contains="")                        startswith,endswith:以value開頭或結(jié)尾,大小寫敏感                        以上四個(gè)在前面加上i,就表示不區(qū)分大小寫iexact,icontains,istartswith,iendswith                        isnull,isnotnull                            是否為空                            filter(sname__isnull=False)                        in:是否包含在范圍內(nèi)                        gt大于,gte大于等于,lt小于,lte小于等于                        year,month,day,week_day,hour,minute,second                            studentsList = Students.stuObj2.filter(lastTime__year=2017)                        跨關(guān)聯(lián)查詢                            處理join查詢                                語法:                                    模型類名__屬性名__比較運(yùn)算符                                    # 描述中帶有‘薛延美’這三個(gè)字的數(shù)據(jù)是屬于哪個(gè)班級(jí)的                                    grade = Grades.objects.filter(students__scontend__contains='薛延美')                                    print(grade)                            查詢快捷pk代表的主鍵                        聚合函數(shù)                            使用aggregate函數(shù)返回聚合函數(shù)的值                            Avg                            Count                            Max                                maxAge = Student.stuObj2.aggregate(Max('sage'))                                maxAge為最大的sage。                            Min                            Sum                        F對(duì)象                            可以使用模型的A屬性與B屬性進(jìn)行比較                            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對(duì)象的算術(shù)運(yùn)算                                g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)                        Q對(duì)象                            概述:過濾器的方法的關(guān)鍵字參數(shù),條件為And模式                            需求:進(jìn)行or查詢                            解決:使用Q對(duì)象                                def students4(request):                                    studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))                                    return render(request, 'myApp/students.html', {"students": studentsList})                                只有一個(gè)Q對(duì)象的時(shí)候,就是用于正常匹配條件                                studentsList = Students.stuObj2.filter(~Q(pk__lte=3))                                ~Q是取反定義屬性    概述:        django根據(jù)屬性的類型確定以下信息            當(dāng)前選擇的數(shù)據(jù)庫支持字段的類型            渲染管理表單時(shí)使用的默認(rèn)html控件            在管理站點(diǎn)最低限度的驗(yàn)證        django會(huì)為表增加自動(dòng)增長的主鍵列,每個(gè)模型只能有一個(gè)主鍵列,如        果使用選項(xiàng)設(shè)置某屬性為主鍵列后,則django不會(huì)再生成默認(rèn)的主鍵列        屬性命名限制            遵循標(biāo)識(shí)符規(guī)則,且變量不能與Python保留字相同            由于django的查詢方式,不允許使用連續(xù)的下劃線    庫        定義屬性時(shí),需要字段類型,字段類型被定義在django.db.models.fields目錄下,        為了方便使用,被導(dǎo)入到django.db.models中        使用方式            導(dǎo)入: from django.db import models            通過 models.Field創(chuàng)建字段類型的對(duì)象,賦值給屬性    邏輯刪除        對(duì)于重要類型都做邏輯刪除,不做物理刪除,實(shí)現(xiàn)方法是定義idDelete屬性,        類型為BooleanField,默認(rèn)值為False    字段類型        autoField            一個(gè)根據(jù)實(shí)際ID自動(dòng)增長的IntegerField,通常不指定,            如果不指定,一個(gè)主鍵字段將自動(dòng)添加到模型中        CharField(max_length=字符長度)            字符串,默認(rèn)的表彰樣式是TextInput        TextField            大文本字段,一般超過4000時(shí)使用,默認(rèn)的表單控件是Textarea        IntegerField            整數(shù)        DecimalField(max_digits=None, decimal_places=None)            使用Python的Decimal實(shí)例表示的十進(jìn)制浮點(diǎn)數(shù)            參數(shù)說明                DecimalField.max_digits                    位數(shù)總數(shù)                DecimalField.decimal_places                    小數(shù)點(diǎn)后的數(shù)字位置        FloatField            使用Python的float實(shí)例來表示的浮點(diǎn)數(shù)        BooleanField            True/False 字段,此字段的默認(rèn)表彰控制是CheckboxInput        NullBooleanField            支持 Null, True, False 三種值        DateField([auto_now=False, auto_now_add=False])            使用Python的datetime.date實(shí)例表示的日期            參數(shù)說明:                DateField.auto_now                    每次保存對(duì)象時(shí),自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于“最后一次修改”                    的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為 False                DateField.auto_now_add                    當(dāng)前對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間,用于創(chuàng)建的時(shí)間戳,                    它總是使用當(dāng)前日期,默認(rèn)為 False            說明                該字段默認(rèn)對(duì)應(yīng)的表單控件是一個(gè)TextInput.在管理員站點(diǎn)添加了一個(gè)                JavaScript寫的日歷控件,和一個(gè)“Today”的快捷按鈕,包含了一個(gè)額外                的invalid_date錯(cuò)誤消息鍵            注意                auto_now_add, auto_now, and default 這些設(shè)置是相互排斥的,他們之間                的任何組合將會(huì)發(fā)生錯(cuò)誤的結(jié)果        TimeField            使用Python的datetime.time實(shí)例表示的時(shí)間,參數(shù)同DateField        DateTimeField            使用Python的datetime            datetime實(shí)例表示的日期和時(shí)間,參數(shù)同DateField        FileField            一個(gè)上傳文件的字段        ImageField            繼承了FileField的所有屬性和方法,但對(duì)上傳的對(duì)象進(jìn)行校驗(yàn),            確保它是一個(gè)有效的image    字段選項(xiàng)        概述            通過字段選項(xiàng),可以實(shí)現(xiàn)對(duì)字段的約束            在字段對(duì)象中通過關(guān)鍵字參數(shù)指定        null            如果為True,Django將空值以NULL存儲(chǔ)在數(shù)據(jù)庫中,默認(rèn)值為 False        blanke            如果為True,則該字段允許為空白,默認(rèn)值為 False        注意            null是數(shù)據(jù)庫范疇的概念,blank是表彰驗(yàn)證范疇的概念        db_column            字段的名稱,如果未指定,則使用屬性的名稱        db_index            若值為 True,則在表中會(huì)為此字段創(chuàng)建索引        default            默認(rèn)值        primary_key            若為 True,則該字段會(huì)成為模型的主鍵字段        unique            如果為 True,這個(gè)字段在表中必須有唯一值    關(guān)系        分類            ForeignKey:一對(duì)多,將字段定義在多的端中            ManyToManyField:多對(duì)多,將字段定義在兩端中            OneToOneField:一對(duì)一,將字段定義在任意一端中        用一訪問多            格式                對(duì)象.模型類小寫_set            示例                grade.students_set        用一訪問一            格式                對(duì)象.模型類小寫            示例                grade.studnets        訪問id            格式                對(duì)象.屬性_id            示例                student.sgrade_id視圖    概述:        作用:視圖接收web請(qǐng)求,并響應(yīng)web請(qǐng)求        本質(zhì):視圖就是python中的一個(gè)函數(shù)        響應(yīng):            響應(yīng)過程:                用戶在瀏覽器中輸入網(wǎng)址www.sunck.wang/sunck/index.html                ---網(wǎng)址--->                django獲取網(wǎng)址信息,去掉IP與端口號(hào),網(wǎng)址變成:sunck/index.html                ---虛擬路徑與文件名--->                url管理器逐個(gè)匹配urlconf,記錄視圖函數(shù)                ---視圖函數(shù)名--->                視圖管理,找到對(duì)應(yīng)的視圖去執(zhí)行,返回結(jié)果給瀏覽器                ---響應(yīng)的數(shù)據(jù)--->                返回第一步:用戶在瀏覽器中輸入網(wǎng)址            網(wǎng)頁                重定向                錯(cuò)誤視圖                    404視圖:找不到網(wǎng)頁(url匹配不成功時(shí)返回)時(shí)返回                        在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:導(dǎo)致錯(cuò)誤的網(wǎng)址                        配置settings.py                            DEBUG                                如果為 True,永遠(yuǎn)不會(huì)調(diào)用404頁面,需要調(diào)整為 False 才會(huì)顯示                            ALLOWED_HOSTS = ['*']                    500視圖:在視圖代碼中出現(xiàn)錯(cuò)誤(服務(wù)器代碼錯(cuò)誤)                    400視圖:錯(cuò)誤出現(xiàn)在客戶的操作            JSON數(shù)據(jù)    url配置        配置流程:            制定根級(jí)url配置文件                settings.py文件中的ROOT_URLCONF                ROOT_URLCONF = 'project.urls'                默認(rèn)實(shí)現(xiàn)了            urlpatterns                一個(gè)url實(shí)例的列表                url對(duì)象                    正則表達(dá)式                    視圖名稱                    名稱            url匹配正則的注意事項(xiàng)                如果想要從url中獲取一個(gè)值,需要對(duì)正則加小括號(hào)                匹配正則前方不需要加'/'                正則前需要加'r'表示字符串不轉(zhuǎn)義        引入其他url配置            在應(yīng)用中創(chuàng)建urls.py文件,定義本應(yīng)用的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配置發(fā)生改變時(shí),動(dòng)態(tài)生成鏈接的地址            解決:在使用鏈接時(shí),通過url配置的名稱,動(dòng)態(tài)生成url地址            作用:使用url模板    視圖函數(shù)        定義視圖:            本質(zhì):一個(gè)函數(shù)            視圖參數(shù):                一個(gè)HttpRequest的實(shí)例                通過正則表達(dá)式獲取的參數(shù)            位置:一般在views.py文件下定義    HttpRequest對(duì)象        概述:            服務(wù)器接收http請(qǐng)求后,會(huì)根據(jù)報(bào)文創(chuàng)建HttpRequest對(duì)象            視圖的第一個(gè)參數(shù)就是HttpRequest對(duì)象            django創(chuàng)建的,之后調(diào)用視圖時(shí)傳遞給視圖        屬性            path:請(qǐng)求的完整路徑(不包括域名和端口)            method:表示請(qǐng)求的方式,常用的有GET,POST            encoding:表示瀏覽器提交的數(shù)據(jù)的編碼方式,一般為utf-8            GET:類似于字典的對(duì)象,包含了get請(qǐng)求的所有參數(shù)            POST:類似于字典的對(duì)象,包含了post請(qǐng)求的所有參數(shù)            FILES:類似字典的對(duì)象,包含了所有上傳的文件            COOKIES:字典,包含所有的cookie            session:類似字典的對(duì)象,表示當(dāng)前會(huì)話        方法            is_ajax():如果是通過XMLHttpRequest發(fā)起的,返回 True        QueryDict對(duì)象            request對(duì)象中的GET,POST都屬于QueryDict對(duì)象            方法:                get():                    根據(jù)鍵獲取值,只能獲取一個(gè)值                    www.sunck.wang/abc?a=1&b=2&c=3                getlist()                    將鍵的值以列表的形式返回                    可以獲取多個(gè)值                    www.sunck.wang/abc?a=1&b=2&c=3        GET屬性            獲取瀏覽器傳遞過來數(shù)據(jù)            www.sunck.wang/abc?a=1&b=2&c=3            urls.py            url(r'^get1', views.get1),   #結(jié)尾不能加$,否則無法匹配            views.py            def get1(request):                a = request.GET.get('a')                b = request.GET.get('b')                c = request.GET.get('c')                return HttpResponse(a + " " + b + " " + c)            www.sunck.wang/abc?a=1&a=2&c=3            urls.py            url(r'^get2', views.get2),            views.py            def get2(request):                a = request.GET.getlist('a')                a1 = a[0]                a2 = a[1]                c = request.GET.get('c')                return HttpResponse(a1 + " " + a2 + " " + c)        POST屬性            使用表單模擬POST請(qǐng)求            關(guān)閉CSRF:project\project\settings.py                MIDDLEWARE = [                    'django.middleware.security.SecurityMiddleware',                    'django.contrib.sessions.middleware.SessionMiddleware',                    'django.middleware.common.CommonMiddleware',                    # 'django.middleware.csrf.CsrfViewMiddleware',                    'django.contrib.auth.middleware.AuthenticationMiddleware',                    'django.contrib.messages.middleware.MessageMiddleware',                    'django.middleware.clickjacking.XFrameOptionsMiddleware',                ]            示例:                def showregist(request):                    return render(request, 'myApp/regist.html',)                def regist(request):                    name = request.POST.get("name")                    gender = request.POST.get("gender")                    age = request.POST.get("age")                    hobby = request.POST.getlist("hobby")                    print(name)                    print(gender)                    print(age)                    print(hobby)                    return HttpResponse("regist")            路徑:                url(r'^showregist/$', views.showregist),                    url(r'^showregist/regist/$', views.regist),            頁面:                   <!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>注冊(cè)</title>                </head>                <body>                    <form action="regist/" method="post">                        姓名:<input type="text" name="name" value=""/>                        <hr>                        性別:<input type="radio" name="gender" value="1">男<input type="radio" name="gender" value="0">女                        <hr>                        愛好:<input type="checkbox" name="hobby" value="power"/>權(quán)利<input type="checkbox" name="hobby" value="money">金錢<input type="checkbox" name="hobby" value="beauty">美女<input type="checkbox" name="hobby" value="Tesla">Tesla                        <hr>                        <input type="submit" value="注冊(cè)">                    </form>                </body>                </html>    HttpResponse對(duì)象        概述:            作用:給瀏覽器返回?cái)?shù)據(jù)            HttpRequest對(duì)象是由Django創(chuàng)建的,HttpResponse對(duì)象是由程序員創(chuàng)建        用法:            不用模板,直接返回?cái)?shù)據(jù)                語句示例:return HttpResponse("Sunck is a good man")            調(diào)用模板                使用render方法                    原型:render(request, templateName[, context])                    作用:結(jié)合數(shù)據(jù)和模板,返回一個(gè)完整的HTML頁面                    參數(shù):                        request:請(qǐng)求體對(duì)象                        templateName:模板路徑                        context:傳遞給需要渲染在模板上的數(shù)據(jù)        屬性            content:表示返回內(nèi)容            charset:編碼格式            status_code:響應(yīng)狀態(tài)碼                200                304                404                400            content-type:指定輸出的MIME類型        方法            init:使用頁面內(nèi)容實(shí)例化HttpResponse對(duì)象            write(content):以文件的形式寫入            flush():以文件的形式輸出緩沖區(qū)            set_cookie(key, value, maxAge=None, exprise=None)            delete_cookie(key):                刪除cookie                如果刪除一個(gè)不存在的cookie,就當(dāng)什么都沒發(fā)生        子類HttpResponseRedirect            功能:重定向,服務(wù)器端的跳轉(zhuǎn)            簡寫                redirect(to)            to推薦使用反向解析            示例:                from django.http import HttpResponseRedirect                from django.shortcuts import redirect                def redirect1(request):                    # return HttpResponseRedirect('/redirect2')                    return redirect('/redirect2')                def redirect2(request):                    return HttpResponse("我是重定向后的視圖")        子類JsonResponse            返回Json數(shù)據(jù),一般用于異步請(qǐng)求            __init__(self.data)            data 字典            注意:Content-type類型為application/json    狀態(tài)保持        http協(xié)議是無狀態(tài)的,每次請(qǐng)求都是一次新的請(qǐng)求,它不記得之前的請(qǐng)求。        客戶端與服務(wù)器的一次通信就是一次會(huì)話        實(shí)現(xiàn)狀態(tài)的保持,在客戶端或服務(wù)端存儲(chǔ)有關(guān)會(huì)話的數(shù)據(jù)        存儲(chǔ)的方式            cookie:所有數(shù)據(jù)存儲(chǔ)在客戶端,不要存儲(chǔ)敏感的數(shù)據(jù)            session:所有的數(shù)據(jù)存儲(chǔ)在服務(wù)端,在客戶端用cookie存儲(chǔ)session_id        狀態(tài)保持的目的:            在一段時(shí)間內(nèi)跟蹤請(qǐng)求者的狀態(tài),可以實(shí)現(xiàn)跨頁面訪問當(dāng)前的請(qǐng)求者的數(shù)據(jù)        注意:不同的請(qǐng)求者之間不會(huì)共享這個(gè)數(shù)據(jù),與請(qǐng)求者一一對(duì)應(yīng)        啟用session:project\project\settings.py            INSTALLED_APPS    'django.contrib.sessions',            MIDDLEWARE    'django.contrib.sessions.middleware.SessionMiddleware',        使用session            啟用session后,每個(gè)httpRequest對(duì)象都有一個(gè)session屬性            get[key, default=None]    根據(jù)鍵獲取session值            clear()    清空所有會(huì)話            flush()    刪除當(dāng)前會(huì)話并刪除會(huì)話的cookie            示例:                # session                def main(request):                    # 取session                    username = request.session.get('name', '游客')                    print(username)                    return render(request, 'myApp/main.html', {'username': username})                def login(request):                    return render(request, 'myApp/login.html')                def showmain(request):                    print("*****************")                    username = request.POST.get('username')                    # 存儲(chǔ)session                    request.session['name'] = username                    return redirect('/main/')                from django.contrib.auth import logout                def quit(request):                    # 清除session                    logout(request) # 方法1,推薦                    # request.session.clear() # 方法2                    request.session.flush() # 方法3                    return redirect('/main/')        設(shè)置session過期時(shí)間            set_expiry(value)            request.session.set_expiry(10)  設(shè)置為10秒后過期            如果不設(shè)置,2個(gè)星期后過期            value設(shè)置為0代表關(guān)閉瀏覽器時(shí)過期            value設(shè)置為None代表設(shè)置永不過期,不推薦Redis使用:略
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Django集成已有的數(shù)據(jù)庫和應(yīng)用
用 Python 在安卓手機(jī)上構(gòu)建 Web 應(yīng)用程序
Django模型層Meta內(nèi)部類詳解
查詢集和單個(gè)查詢數(shù)據(jù)
模型(Models)和管理后臺(tái)(Admin site)
Django Tutorial Part 4: Django 管理員站點(diǎn)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服