2017-04-21 18 views
0

我想創建一個非常簡單的API,只有一個端點。 我要發送到的API就像一個JSON: { 「提供者」: 「com.facebook.orca」, 「代碼」: 「1」, 「顏色」: 「#FFFFF」 }Django/Python POST API不帶模型/串行器

然後,我想用一個python庫來控制我房間裏的設備(python-yeelight)。我想用Auth令牌或用戶名/密碼進行驗證。

我的Django的REST框架發現什麼是太複雜了什麼,我需要(這是接受POST並返回一個「成功」或「失敗」的消息。

謝謝!

+0

OK。那麼你在基本的Django中如何解決這個問題呢? –

+0

我需要創建一個模型,一個序列化器,一些字段,元等,所有這些都不需要。但我仍然需要Auth(不能使用csrf_token) –

+0

我不明白這個答覆。你說過你不想使用django-rest-framework,這很好;所以你*不需要創建任何這些東西。那麼,你究竟做了什麼,你有什麼問題? –

回答

0

你可以創建一個方法裝飾來實現基本的身份驗證。使用這個裝飾包裝你的所有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。

+0

我會試試看,謝謝。我應該在哪裏放置自定義功能?在views.py中可以嗎? –

+0

是的。它將在您的views.py文件中。 –

+0

好的,我複製了整個代碼。我如何在POST中傳遞用戶名/密碼?從代碼看來,我應該在頭文件中傳入HTTP_AUTHORIZATION_TOKEN。 但我如何獲得? (我很抱歉,我習慣了PHP/Laravel,第一次與Django合作) –

相關問題