DRF十大元件

2021-09-25 21:00:22 字數 3402 閱讀 3183

4.版本

版本控制

模型類設計

from django.db import models

# create your models here.

class usergroup(models.model):

title = models.charfield(max_length=32, verbose_name='使用者組名')

class role(models.model):

title = models.charfield(max_length=32, verbose_name="角色")

class userinfo(models.model):

user_type_choices = (

(1, "普通使用者"),

(2, "vip"),

(3, "svip")

)user_type = models.integerfield(choices=user_type_choices, verbose_name="使用者型別")

username = models.charfield(max_length=32, unique=true)

password = models.charfield(max_length=256)

group = models.foreignkey(usergroup, verbose_name="使用者型別")

roles = models.manytomanyfield(role)

class usertoken(models.model):

user = models.onetoonefield(userinfo)

token = models.charfield(max_length=256)

5.直譯器

解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程.(drf比django強大很多)

from rest_framework.parsers import jsonparser

class parserview(apiview):

# 允許使用者傳送json格式資料

# 2. 支援請求體

parser_classes = [jsonparser]

def post(self, request, *args, **kwargs):

print(type(request._request))

return httpresponse("post和body")

6.序列化

編寫檢視

import json

from django.forms.models import model_to_dict

class rolesview(apiview):

def get(self, request, *args, **kwargs):

#dgango序列化方式一

roles = models.role.objects.all().values('id', 'title')

roles = list(roles)

ret = json.dumps(roles,ensure_ascii=false)

# dgango序列化方式二

# roles = models.role.objects.all()

# ret =

# for model in roles:

# data = model_to_dict(model)

# # print(ret)

# ret = json.dumps(ret,ensure_ascii=false)

7.分頁

自定義使用

#自定義分頁類

class mypagenumberpagination(pagenumberpagination):

#每頁顯示多少個

page_size = 3

#預設每頁顯示3個,可以通過傳入pager1/?page=2&size=4,改變預設每頁顯示的個數

page_size_query_param = "size"

#最大頁數不超過10

max_page_size = 10

#獲取頁碼數的

page_query_param = "page"

class pager1view(apiview):

def get(self,request,*args,**kwargs):

#獲取所有資料

roles = models.role.objects.all()

#建立分頁物件,這裡是自定義的mypagenumberpagination

pg = mypagenumberpagination()

#獲取分頁的資料

page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)

#對資料進行序列化

ser = pagerserialiser(instance=page_roles,many=true)

return response(ser.data)

8.檢視

檢視 listmodelmixin

from rest_framework.generics import genericapiview

from rest_framework.viewsets import genericviewset

from rest_framework.mixins import listmodelmixin

class myview(listmodelmixin,genericviewset):

queryset = models.role.objects.all()

serializer_class = pagerserializer

pagination_class = pagenumberpagination

def list(self, request, *args, **kwargs):

# 獲取資料

roles = self.get_queryset()

# 進行分頁

pager_roles = self.paginate_queryset(roles)

# 序列化

ser = self.get_serializer(instance=pager_roles, many=true)

return response(ser.data)

9.路由

10.渲染器

DRF十大元件使用

23 request.request.post.get json資料格式 data json.loads request.body.decode utf 8 name data.get name age data.get age print name,age 使用drf解析器 from rest f...

DRF的十大元件之認證 許可權 節流

1.認證 定義乙個使用者表和乙個儲存使用者的token表 django的settings檔案 2.許可權 只有vip使用者才能看的內容 自定義許可權類 from rest framework.permissions import basepermission class mypermission b...

python十大語法 python十大易錯語法

1.for else 不是 if 和 else 才是原配嗎?for 和 else 也是一對,而且是合法的。for i in 1,2,3,4 print i else print i,我是else 結果 4 我是else 如果在 for 和 else 之間 迴圈體內 有第三者 if 插足,也不會影響 ...