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('<