你可以創建一個方法裝飾來實現基本的身份驗證。使用這個裝飾包裝你的所有Django的看法。
def token_required(function):
def wrap(request, *args, **kwargs):
auth_token = request.META.get('HTTP_AUTHORIZATION_TOKEN')
if auth_token:
try:
token = Tokens.objects.get(token=auth_token)
user = token.user
except Tokens.DoesNotExist:
user=None
else:
r = {
'status': -1,
'message': 'Please provide a valid token.'
}
return HttpResponse(json.dumps(r), content_type="application/json")
if user:
request.user = user
return function(request, *args, **kwargs)
else:
r = {
'status': -2,
'message': 'User not Authorised, Please login'
}
return HttpResponse(json.dumps(r), content_type="application/json")
return wrap
現在所有請求必須包含一個標題如下圖所示,以瀏覽用這個裝飾包裹檢測內部意見的用戶。
授權-TOKEN:some_token_value
您的令牌模型看起來類似,如下圖所示。
class Tokens(models.Model):
user = models.OneToOneField(User, related_name="tokens",null=False)
token = models.CharField(max_length=255, unique=True)
def save(self, *args, **kwargs):
if self.token is None or self.token == "":
import uuid
self.token=uuid.uuid4().hex
super(Tokens, self).save(*args, **kwargs)
樣品使用裝飾的:
@csrf_exempt
@token_required
def your_view(request):
pass
我想這應該幫助你。 OK。
OK。那麼你在基本的Django中如何解決這個問題呢? –
我需要創建一個模型,一個序列化器,一些字段,元等,所有這些都不需要。但我仍然需要Auth(不能使用csrf_token) –
我不明白這個答覆。你說過你不想使用django-rest-framework,這很好;所以你*不需要創建任何這些東西。那麼,你究竟做了什麼,你有什麼問題? –