drf路由分發、解析/渲染模組配置、使用admin、自動序列化配置
目錄
- APIView的請求生命週期
- 重寫的as_view方法
- 重寫的dispatch方法
- drf路由分發配置
- 解析模組配置
- 渲染模組配置
- 瀏覽器渲染開啟
- 瀏覽器渲染關閉
- 結論
- drf使用後臺admin
- drf序列化元件
- serializers.py:
- views.py:單查群查
- 測試:
- 連表操作
- 配置圖片和性別
APIView的請求生命週期
重寫的as_view方法
"""
1)as_view方法完成路由配置,返回配置函式是 csrf_exempt(view),也就是禁用了csrf認證規則
結論:所有繼承APIView的子類,都不受csrf認證規則的限制
2)將請求處理的任務交給dispath方法完成
"""
重寫的dispatch方法
""" 完成了三大核心任務: 1)請求物件的處理:請求渲染模組 2)請求過程的處理:三大認證模組 => 自己程式碼完成處理 3)請求結果的響應:異常模組處理異常響應 | 響應渲染模組處理正常響應 """
drf路由分發配置
主路由:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls'))
]
副路由:
from django.conf.urls import url from . import views from django.views.static import serve from d_priect import settings urlpatterns = [ url(r'users/$',views.UserAPIView.as_view()), url(r'users/(?P<pk>\d+)/$',views.UserAPIView.as_view()), # 暴露檔案 url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}), ]
檢視:
注意:rest_framework需要先註冊,在settings.py中:
INSTALLED_APPS = [
# drf框架的部分功能是依賴於註冊後的,所有drf需要在app中註冊
'rest_framework',
]
from rest_framework.views import APIView
from rest_framework.response import Response
class UserAPIView(APIView):
def get(self,request,*args,**kwargs):
return Response('get ok')
def post(self,*args,**kwargs):
return Response('post ok')
解析模組配置
from rest_framework.settings import APISettings
# 自定義drf配置
REST_FRAMEWORK = {
# 解析模組
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', # json資料型別
'rest_framework.parsers.FormParser', # urlencoded資料型別
'rest_framework.parsers.MultiPartParser' # from-data資料型別
],
# 渲染模組
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', # 資料渲染
'rest_framework.renderers.BrowsableAPIRenderer', # 瀏覽器渲染
],
}
渲染模組配置
瀏覽器渲染開啟
別人知道你後臺用什麼寫的,好攻擊你
瀏覽器渲染關閉
效果:資料正常渲染,瀏覽器只有資料。別人不知道你後臺資料怎麼寫的,不容易攻擊你
結論
當專案沒上線的時候:一般瀏覽器渲染開啟
當專案上線:為了安全一般把瀏覽器渲染關閉
drf使用後臺admin
現在admin.py種寫入:然後一切正常
from django.contrib import admin
from . import models
admin.site.register(models.User)
drf序列化元件
serializers.py:
from rest_framework import serializers
from . import models
class UserModelSerializer(serializers.ModelSerializer):
class Meta:
# 該序列化類是輔助於那個Model類的
model = models.User
fields = ['name', 'age', 'height']
views.py:單查群查
from . import models
from . import serializers
class UserAPIView(APIView):
def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if pk: # 單查
# 1)資料庫互動拿到資源obj或資源objs
# 2)資料序列化成可以返回給前臺的json資料
# 3)將json資料返回給前臺
obj = models.User.objects.get(pk=pk)
serializer = serializers.UserModelSerializer(obj,many=False) # # many=True表示:操作多個數據.預設為False
return Response(serializer.data)
else: # 群查
# 1)資料庫互動拿到資源obj或資源objs
# 2)資料序列化成可以返回給前臺的json資料
# 3)將json資料返回給前臺
queryset = models.User.objects.all()
serializer = serializers.UserModelSerializer(queryset, many=True) # many=True表示:操作多個數據
return Response(serializer.data)
測試:
連表操作
配置圖片和性別
測試:
相關推薦
drf路由分發、解析/渲染模組配置、使用admin、自動序列化配置
目錄 APIView的請求生命週期 重寫的as_view方法 重寫的dispatch方法 drf路由分發配置 解析模組配置 渲染模組配置 瀏覽器渲染開啟
python程式設計os、os.path 模組中關於檔案、目錄常用的函式使用方法
os模組中關於檔案/目錄常用的函式使用方法 函式名 使用方法 getcwd() 返回當前工作目錄 chdir(pat
os、os.path 模組中關於檔案、目錄常用的函式使用方法
我們第一節課就講過了,Python是跨平臺的語言,也即是說同樣的原始碼在不同的作業系統不需要修改就可以同樣實現。因此Python的作者就倒騰了OS模組這麼一個玩意兒出來,有了OS模組,我們不需要關心什麼作業系統下使用什麼模組,OS模組會幫你選擇正確的模組並呼叫。 os模組中關於檔案/目錄常用的函
Python3從零開始爬取今日頭條的新聞【五、解析頭條視訊真實播放地址並自動下載】
本文目錄:1.目標2.實現參考資料: 1.目標 本文目標是自動解析頭條的視訊新聞,通過第三方解析網站得到其真實的下載地址並自動下載到本地 *至於如何通過py自動解析、檢視大咖個人中心的視訊頁籤內容
一句python,一句R︱列表、元組、字典、資料型別、自定義模組匯入(格式、去重)
先學了R,最近剛剛上手python,所以想著將python和R結合起來互相對比來更好理解python。最好就是一句python,對應寫一句R。pandas中有類似R中的read.table的功能,而且很像。———————————————————————————————————
SpringBoot Redis序列化配置
Redis配置 #Redis spring.redis.host= spring.redis.port=6379 spring.redis.database=0 # Redis伺服器連線密碼(預設為空) spring.redis.password= # 連線池最大連線數(使用負值表示沒有限制) sp
[瘋狂Java]I/O:I/O流的最高境界——物件流(序列化:手動序列化、自動序列化、引用序列化、版本)
1. 什麼是物件流:序列化/反序列化的概念 1) 物件流是和位元組流/字元流同處於一個概念體系的: a. 這麼說位元組流是流動的位元組序列,字元流是流動的字元序列,那麼物件流就是流動的物件序列咯? b. 概念上確實可以這樣理解,物件流
GRUB2配置詳解:預設啟動項,超時時間,隱藏引導選單,配置檔案詳解,圖形化配置
配置檔案詳解: /etc/default/grub # 設定預設啟動項,推薦使用數字 GRUB_DEFAULT=0 # 註釋掉下面這行將會顯示引導選單 #GRUB_HIDDEN_TIMEOUT=0 # 黑屏,並且不顯示GRUB_HIDDEN_TIMEOUT過程中的倒計
\.ini配置檔案轉字典進行序列化
需求 讀取mysql下的mysql.ini配置檔案,並講配置檔案轉化為字典並採用不同方法進行序列化 程式碼實現 # -*- coding: UTF-8 -*- import configparser import json import pickl
$Django-路由層(有,無名分組、反向解析、總路由分發、名稱空間、偽靜態)
1 簡單配置 -第一個引數是正則表示式(如果要精準匹配:'^publish/$') -第二個引數是檢視函式(不要加括號) -url(r'^admin/', admin.site.urls), 2 無名分組 -按位
DRF之頻率限制、分頁、解析器和渲染器
一、頻率限制 1、頻率限制是做什麼的 開放平臺的API介面呼叫需要限制其頻率,以節約伺服器資源和避免惡意的頻繁呼叫。 2、頻率元件原理 DRF中的頻率控制基本原理是基於訪問次數和時間的,當然我們可以通過自己定義的方法來實現。當我們請求進來,走到我們頻率元件的時候,DRF內部會有一個字典
DRF 版本、認證、權限、限制、解析器和渲染器
斷言 lin .html remote ati efault rfi site initial 目錄 一.DRF之版本控制 為什麽要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用較少) 二.DRF之認證 內置的認證 步驟 三.DRF之權
瀏覽器加載、解析、渲染的過程
js xml bce ntb web服務器 設置 成了 div 概率 發生 最近在學習性能優化,學習了雅虎軍規 ,可是覺著有點雲裏霧裏的,因為裏面有些東西雖然自己也一直在使用,但是感覺不太明白所以然,比如減少DNS查詢,css和js文件的順序。所以就花了時間去了解瀏覽器的工
Nginx配置:防盜鏈、訪問控制、解析PHP以及代理
防盜鏈 訪問控制 Nginx代理 一、Nginx防盜鏈 防盜鏈是指一個網站的資源(圖片或附件)未經允許在其它網站提供瀏覽和下載,尤其熱門資源的盜鏈,對網站帶寬的消耗非常大,設置防盜鏈以節省資源。 1、修改虛擬主機配置文件 [root@zlinux vhost]# vim linuxtest.c
SpringBoot系列四:SpringBoot開發(改變環境屬性、讀取資源文件、Bean 配置、模版渲染、profile 配置)
pat row 開發 ima set his 改變 端口配置 import 1、概念 SpringBoot 開發深入 2、具體內容 在之前已經基本上了解了整個 SpringBoot 運行機制,但是也需要清楚的認識到以下的問題,在實際的項目開發之中,尤其是 Java
9、網絡知識(路由交換和ARP協議)+配置單網卡多ip和配置默認路由
路由交換 ARP協議 網絡配置網絡知識詳解 提問:網絡到底是什麽?我們在電纜中傳輸的都是電信號(高電壓或者是低電壓),所以高電壓就是1,低電壓就是0,所以規定一定的時間傳輸固定的高低電壓來當做是接收的數據我們所謂的10Mbps:每秒中可以傳輸10M個bit所以別人說你的是4M的帶寬,指的就是4Mbps,要除
Nginx防盜鏈、訪問控制、解析php相關配置、Nginx代理
LinuxNginx防盜鏈 編輯虛擬主機配置文件vim /usr/local/nginx/conf/vhost/test.com.conf 在配置文件中添加如下的內容 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x
25、【支付模組開發】——將配置好的支付寶沙箱環境整合到我們的專案中以及支付介面的編寫
####1、將支付寶Demo中的相關檔案複製到我們的專案中: 首先,我們將Demo中src中的包及裡面的檔案複製到我們專案中 同樣,我們也要講zhifubao.properties這個配置檔案方法我們專案中的 resources目錄下: 加下來就是我們的jar包了~ 首先我們先在
nginx 配置解決 ---react 、vue 單頁面路由之後重新整理404---問題
nginx中文文件:http://www.nginx.cn/doc/ nginx官網:http://nginx.org/en/docs/ Nginx開發從入門到精通:http://tengine.taobao.org/book/index.html 1、問題現象? 答:在瀏覽器中直接
8、第十 - WEB開發進階 - Django URL路由分發
Django基於正則表示式的URL Django的路由模式,主要是定義前端的URL訪問模式。簡單歸納有以下幾種方式: 1、FBV結構:path(r'index/',views.index); CBV結構:path(r'home',views.Home.as_view()), 2、字串拼