首先要在model表內新增使用者表和token表:
from django.db importmodels
#create your models here.
class
user(models.model):
name=models.charfield(max_length=32)
pwd=models.charfield(max_length=32)
class
token(models.model):
user=models.onetoonefield("
user
",on_delete=models.cascade)
token=models.charfield(max_length=128)
importhashlib,time
defget_random_str(user):
ctime=str(time.time())
md5=hashlib.md5(bytes(user,encoding="
utf-8"))
md5.update(bytes(ctime,encoding="
utf-8"))
return
md5.hexdigest()
class
loginview(apiview):
defpost(self,request):
name=request.data.get("
name")
pwd=request.data.get("
pwd"
) user=user.objects.filter(name=name,pwd=pwd).first()
res=
ifuser:
random_str=get_random_str(user.name)
toekn=token.objects.update_or_create(user=user,defaults=)
res[
"token
"]=random_str
else
: res[
"state_code
"]=1001 #
錯誤的狀態碼
res["
msg"]="
使用者名稱密碼錯誤!
"return response(json.dumps(res))
#author:jesi
#time : 2018/10/6 18:14
from .models import *
from rest_framework.authentication import
baseauthentication
from rest_framework import
exceptions
class
tokenauth(baseauthentication):
defauthenticate(self,request):
'''函式名必須叫authenticate
'''#
驗證條件根據需求設定(此示例為需要有token值)
token=request.get.get("
token")
token_obj=token.objects.filter(token=token).first()
ifnot
token_obj:
#如果驗證失敗,需要跑出authenticationfailed錯誤
raise exceptions.authenticationfailed("
驗證失敗!")
else
:
#如果驗證成功,需要返回乙個元組,分別是使用者以及驗證類的例項物件,然後內部會賦值給request.user和request.auth
return
token_obj.user.name,token_obj.token
defauthenticate_header(self,request):
#加上上面的基礎類繼承,那麼這個header方法就可以不用寫了。
pass
在檢視中只需要加一句就ok了。
classbookview(apiview):
authentication_classes
= [tokenauth]
# 注意,值為乙個列表,可以放多個認證元件類名
defget(self,request):
print(request.user) #
token_obj.user.name
print(request.auth) #
token_obj.token
book_list=book.objects.all()
#bs=bookserializers(book_list,many=true)
bs2=bookmodelserializers(book_list,many=true,context=)
#return response(bs.data)
return response(bs2.data)
這裡列印的2個request.user,request.auth分別就是上面認證類返回的token_obj.user.name和token_obj.token。是乙個元組。
將認證類放到乙個util.py的乙個額外檔案下:
#author:jesi
#time : 2018/10/6 18:14
from .models import *
from rest_framework.authentication import
baseauthentication
from rest_framework import
exceptions
class
tokenauth(baseauthentication):
defauthenticate(self,request):
token=request.get.get("
token")
token_obj=token.objects.filter(token=token).first()
ifnot
token_obj:
raise exceptions.authenticationfailed("
驗證失敗!")
else
:
return
token_obj.user.name,token_obj.token
defauthenticate_header(self,request):
#加上上面的基礎類繼承,那麼這個header就可以不用寫了。
pass
然後在settings裡面進行乙個配置:
rest_framework=
這樣全域性就都擁有了認證的元件。如果要檢視書籍,作者等操作的時候需要帶上token通過認證類的驗證才可以。
authentication_classes = #自己的類裡有的話就呼叫此類的配置,為空既什麼都不做
restframework的許可權
許可權的主要應用比如指定的資料,vip使用者或者付費才能 的,普通使用者不能訪問,我們就可以用許可權元件對其進行限制 許可權的都是發生在認證後面的,所以認證時要返回obj.user,許可權判斷的時候好直接獲取使用者 from rest framework.permissions import bas...
初始Rest Framework的魅力
1.建立序列化器 在應用中新建serializers.py用於儲存該應用的序列化器。class infoserializer serializers.modelserializer 圖書資料序列化器 class meta model info fields all from rest framewo...
rest framework 中的分頁
注意這種寫法不支援api view和api view 配置setting default pagination class 2.建立乙個資料夾mypagenumberpagination class mypagenumberpagination pagenumberpagination page s...