2017-04-21 2 views
0

Ich möchte eine sehr einfache API mit nur einem Endpunkt erstellen. Ich möchte wie ein Json an eine API senden: { "Anbieter": "com.facebook.orca", "Code": "1", "color": "#FFFFF" }Django/Python POST API ohne Modell/Serializer

Dann möchte ich eine Python-Bibliothek verwenden, um ein Gerät in meinem Zimmer zu steuern (python-yeelight). Ich möchte dies mit einem Authentifizierungs-Token oder einem Benutzernamen/Passwort authentifizieren.

Was ich auf Django Ruhe Rahmen fand, war viel zu kompliziert für das, was ich brauche (die eine POST akzeptiert und einen „Erfolg“ oder „Misserfolg“ -Meldung zurück.

Thank you!

+0

OK. Also, wo hast du Probleme in Django? –

+0

Ich muss ein Modell, einen Serializer, einige Felder, Meta, usw. erstellen. Alle von denen werden nicht benötigt. Aber ich brauche immer noch die Auth (kann csrf_token nicht verwenden) –

+0

Ich verstehe diese Antwort nicht. Du hast gesagt, du willst kein Django-Rest-Framework verwenden, was gut ist; Du musst also keines dieser Dinge erschaffen. Also, was hast du eigentlich gemacht und welches Problem hast du? –

Antwort

0

Sie können schaffen ein Verfahren Dekorateur Standardauthentifizierung zu implementieren. Wickeln Sie Ihre django Ansichten dieses Dekorateur verwenden.

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 

Jetzt werden alle Ihre Anfragen einen Header wie unten dargestellt von diesem Dekorateur gewickelt Ansichten enthalten muss den Benutzer Innenansichten zu erkennen.

ZULASSUNG-TOKEN: some_token_value

Ihr Token-Modell wird ungefähr so ​​aussehen wie unten dargestellt.

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) 

Beispiel Verwendung von Dekorateur:

@csrf_exempt 
@token_required 
def your_view(request): 
    pass 

Ich denke, dies sollte Ihnen helfen.

+0

Ich werde es versuchen, danke. Wo sollte ich die benutzerdefinierte Funktion platzieren? In views.py ist es in Ordnung? –

+0

Ja. Es befindet sich in Ihrer views.py-Datei. –

+0

Ok, ich habe den ganzen Code kopiert. Wie genau gebe ich den Benutzernamen/das Passwort im POST weiter? Aus dem Code scheint es, dass ich in Header den HTTP_AUTHORIZATION_TOKEN übergeben soll. Aber wie bekomme ich das? (Es tut mir leid, ich bin an PHP/Laravel gewöhnt, zum ersten Mal mit Django) –