1、django基本知識使用

響應對象

HttpResponse

respone = HttpResponse(content=響應體, content_type=響應體數據MIME類型, status=狀態碼)
respone['響應頭key'] = 響應頭值

JsonResponse【重點】

# 傳遞字典類型的數據   content_type: application/json
JsonResponse({"city":"廣州"})
# 傳遞列表數據
JsonResponse([{"city":"廣州"}, {'name': '北京'}], safe=False)

重定向

def resp(request):
   # 重定向到首頁   狀態碼:302
   # HttpResponseRedirect
   return redirect('/index')

reverse函數【知道-用得較少】

動態地生成url地址,解決url重定向硬編碼維護麻煩的問題
url配置:

# 項目的urls.py
url(r'^', include('users.urls', namespace='命名空間')),  
# 應用的urls.py
url(r'^index$', views.index, name='url配置項名'),
# 生成方式
url = reverse('命名空間:url配置項名稱') 
<RegexURLPattern index ^index$>,
<RegexURLPattern None ^resp$>,
<RegexURLPattern None ^my_redirect$>, 
<RegexURLPattern None ^set_cookie$>, 

示例

# 項目的urls.py
url(r'^', include('users.urls', namespace='users')),  
# 應用的urls.py
url(r'^home$', views.index, name='index'),

def my_redirect(request):
    # 生成的url的值爲 /home
	url = reverse('users:index') 
    return redirect(url) # 重定向

狀態保存【理解】

cookie

特點:

  • 由服務器生成保存在客戶端的鍵值對數據

操作

  • 保存cookie:使用 響應對象response.set_cookie('鍵', 值)

  • 讀取cookie: 使用 request對象request.COOKIES.get('鍵)

    有效期:默認爲關閉瀏覽器後 cookie 就失效

session

  • session工作原理

    1540633287434

    1537082090932

    • django默認保存session到數據庫表中

    • 一條記錄保存一個瀏覽器(一個用戶)的所有的session鍵值對數據

    • 通過sessionid來區分不同的瀏覽器(不同用戶)

  • 通過session相關命令

    request.session['鍵']=# 保存
    request.session.get('鍵')				  # 讀取
    request.session.set_expiry(value)		  # 設置有效期,默認爲2周
    del request.session['鍵']	              # 刪除一個鍵值
    request.session.flush()  	# 刪除當前訪問用戶所有session數據: 刪除一條表記錄
    request.session.clear()  	# 刪除當前訪問用戶所有session數據: 清空字段中的值
    
  • session默認有效期:兩週

Django是如何保存和註銷用戶登錄狀態的【擴展】

  • 管理後臺登錄界面

1537096113980

  • 登錄成功調用login方法,通過session保存登錄用戶id

1537095898909

1537097093939

1537097143795

  • 註銷一個用戶會清除session數據

1537095848556

1537097368489

  • 登錄之後,通過 request.user 就能得到登錄用戶對象

類視圖

類視圖使用【重點】

  • 定義類視圖,繼承View類,在類視圖中定義get, post, put等相關方法

    class PostView(View):
        def get(self, request):
            return render(request, 'post2.html')
    
        def post(self, request):
            return HttpResponse('執行發帖操作')
    
  • 配置路由時,調用類視圖的.as_view()方法

    urlpatterns = [
         ...
         url(r'^post2$', views.PostView.as_view()),
     ]
    

類視圖使用裝飾器

  • method_decorator: 爲函數裝飾器補充第一個self參數,使它可以應用到類的方法中。

方式1:

class PostView(View):
    def get(self, request):
        return render(request, 'post2.html')

    @method_decorator(check_ip)
    def post(self, request):
        return HttpResponse('處理髮帖操作')

方式2:

@method_decorator(check_ip, name='get')
#@method_decorator(check_ip, name='dispatch')
class PostView(View):
    def get(self, request):
        return render(request, 'post2.html')

    def post(self, request):
        return HttpResponse('處理髮帖操作')

中間件【理解】

作用:在視圖執行前或執行後,作一些額外的操作,比如:

  • 在視圖執行前判斷ip是否爲黑名單

中間件的執行順序

1537083433726

中間件使用

  1. 定義中間件
class MyMiddleware(MiddlewareMixin):
    
    def process_request(self, request):
        print('before 視圖')
        # 注意:可以返回None或者response對象,如果返回response對象,則視圖函數就不會再執行了

    def process_response(self, request, response):
        print('after 視圖')
        return response   	# 必須要有返回值
  1. 在settings文件中配置
MIDDLEWARE = [
     ...
     'middlewares.MyMiddleware',  # 註冊中間件
 ]

request.user對象從何而來【擴展】

  • django提供了一個認證中間件

1537097998940

  • 在視圖執行前會查詢登錄的用戶對象

1537110334829

  • get_user方法:會取出用戶id查去查詢

1537098288600

  • 從session讀取出用戶id

1540647349390

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章