1. 課程介紹 - 數據類型 - 函數 - 面向對象三大特性:繼承,封裝,多態 - socket:本質傳輸字節;全部網絡通訊都基於socket - 數據庫設計:單表、FK、M2M (本身做業:本身領域設計表,相親網站) - 會用:html/css/js/bootstrap2. Http知識 基於Socket 瀏覽器(格式一): Web服務器(格式一): MySQL客戶端(格式二): MySQL服務端(格式二): 本質: socket = socket.socket() socket.connect((ip,端口)) socket.sendall(b'87ljas9802jlksjdf098jlksdf09') 瀏覽器發送GET請求數據格式: socket = socket.socket() socket.connect((ip,端口)) socket.sendall(b'GET /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\n') request.GET.get('name') 瀏覽器發送POST請求數據格式: socket = socket.socket() socket.connect((ip,端口)) socket.sendall(b'POST /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\na1=123&a2=666&a3=xx') Django加工POST請求的數據, 判斷用戶是否傳遞的是Django能夠向request.POST中解析的數據?讀取請求頭Content-Type: application/x-www-form-urlencoded,那麼就去解析request.body中的值,放置到request.POST中 a1=123&a2=666&a3=xx request.POST.get('name') request.body b"a1=123&a2=666&a3=xx" Django加工POST請求的數據:{a1:123,a2:567} request.POST 空 request.body b"{a1:123,a2:567}" Http協議 - 請求頭和請求體分割:\r\n\r\n - 請求體之間:\r\n - GET無請求體 - 無狀態,短鏈接:socket請求響應斷開 - 請求頭表明的意義 - user-agent:來源 - referer: 防盜鏈 - content-type:請求體是什麼格式?3. Django請求生命週期 wsgiref: 函數版本: from wsgiref.simple_server import make_server def run_server(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': httpd = make_server('127.0.0.1', 8000, run_server) # 請求一旦到來:run_server(..) httpd.serve_forever() 類版本: from wsgiref.simple_server import make_server class WsgiHandler(object): def __call__(self,environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__': obj =WsgiHandler() httpd = make_server('127.0.0.1', 8000, obj) # 請求一旦到來:obj(..) httpd.serve_forever() # 類() -> __init__ # 類()() -> __call__ 生命週期:圖 注意: 渲染工做在Django中執行完成後,字符串返回給瀏覽器。 可是:js,css額外再發一次請求僅獲取靜態文件 4. 問題: a. TemplateDoesNotExist - 寫錯誤 - 配置 - 文件夾 b. 靜態文件404 - 寫錯誤 - 配置 - 文件夾 5. Django全部知識點: 知識點: 1. 路由規則 - /index/ func - /\d+/ func() - /?P<name(\d+)>/ func() #有名分組 - include 用來進行路由的分發 url(r'^blog/', include('blog.urls')) - 反向生成URL:#這個不太熟悉 - {%url ""%} - reverse('a1',args=(1,)) 2. 視圖函數: 請求相關: request: method #看函數獲取數據的方法 GET.get/.getlist 用來獲取數據單個數據用get,列表用getlist POST #同上 COOKIES #設置是在三次請求中的第二次返回時設置COOKIES # obj=redirect("/home/")#給瀏覽器一個cookie在返回時 # # obj.set_cookie("is_login",True,20)#設置一個cookie,它是一個字典類型的 # # obj.set_cookie("username",username) # return obj 獲取COOKIES的值 # is_login=request.COOKIES.get("is_login",None)#判斷這個頁面是否帶着cookie 刪除COOKIES response.delete_cookie("cookie_key",path="/",domain=name) session #設置session值 request.session["is_login"]=True#設置session值 request.session["USER"]=username 獲取 ret=request.session.get("is_login",None)#獲取session裏面的鍵值對 刪除session # del request.session["IS_LOGON"]#這是刪除一個鍵值對 request.session.flush()這是刪除整條記錄 Django自帶的認證系統: user=auth.authenticate(username=user,password=pwd)#判斷是否在數據庫內 auth.login(request,user)登錄的語法 User.objects.create_user(username=user,password=pwd)這是建立新用戶時的語法 更改密碼操做: user request.user獲取當前用戶的名字 body 全部的數據都在body裏 request.FILES 獲取上傳的文件 響應相關:(三種方法都是字符串) render HttpResponse redirect 3. 模板語言 if for 模板的if和for循環 索引:. 句點符 執行:不加括號自動執行函數 filter和simple_tag 4. ORM操做 建立表: 類 字段:INT,CHA,FK,M2M # 外鍵的關係 操做表:(CURD)增刪改查 13操做(13中操做) - 補充: filter values vlaues_list all/values/values_list __ 了不得的下劃線 正向和反向 #數據的查詢正向與反向 整理: - 路由對應關係: - 模板繼承 - 模板標記標籤:for,if, - 返回: - HttpResponse - render - redirect - 啓動 - Model類的建立,繼承Model - migrate - 模板自定義函數:filter,sample_tag - cookie和Session - 基本配置文件: - 模板 - 靜態文件 - MySQL 和proejct同名的目錄的__init__ - Model中自定義方法:__str__ - Model操做: 建立: create save bulk_create 13中操做: filter(nage='xx") filter(**{age:18}) values('id') values(*['id','name']) values_list last first all distict exclude get update(age=11) update(**{age:11}) delete() - 多對多查詢(查詢) - URL別名,目的:反向生成URL /detail/(\d+)/ name = a1 from django.url import reverse url = reverse('a1',args=[6,]) - Django自帶auth驗證 - 模板 - 分頁 - 分組和聚合