django-simple-rest

Software kuvakaappaus:
django-simple-rest
Ohjelmiston tiedot:
Versio: 1.4.1
Lähetyksen päivämäärä: 20 Feb 15
Kehittäjä: Christopher Roach
Lupa: Vapaa
Suosio: 16

Rating: 1.5/5 (Total Votes: 2)

Django-yksinkertainen-lepo on erittäin kevyt kehys, joka tarjoaa vain paljain luut perusasiat mitä tarvitaan luomaan rauhallista API päälle Django.
Asennus
1. Asenna käyttäen PIP tai easy_install:
- PIP asentaa loput tai easy_install asentaa loput
2. Lisää ExceptionMiddleware luetteloon middleware luokkien (vapaaehtoinen):
- MIDDLEWARE_CLASSES + = ['rest.exceptions.ExceptionMiddleware']
- Tämä vaihe on valinnainen ja tarvitaan vain, jos haluat pystyä nostamaan HttpError näkymästä.
3. Lisää paketti luetteloon asennetut sovellukset (vapaaehtoinen):
- INSTALLED_APPS + = ['lepo']
- Tämä vaihe on valinnainen ja tarvitaan vain, jos aiot käyttää toimitukseen custom Django komento (t).
Miksi Toinen REST Framework?
Se on hyvä kysymys, ja yksinkertaisin vastaus on, että tämä ei todellakaan ole kehystä lainkaan, mutta haluan kertoa hieman pidemmälle.
Ottamalla käyttöön luokkayhteiskuntaa näkemyksiä versiossa 1.3 Django, web puitteet on lähes kaiken tarvittavan rakennettu luomaan rauhallista API, mutta vain muutamia asioita puuttuu. Tämä "puitteet" luovuttaja viime asioita.
Ajattele Simple loput koodin että olisit kirjoittanut saada luokkapohjaiset näkemyksiä toimi oikein alustana rauhallista API kehittämiseen. Katsoin tuossa näkymässä, voit alkaa ymmärtää, mitä Simple REST1 on; Se on kokoelma koodia, joka tekee mahdolliseksi luoda rauhallista API kanssa Django luokkayhteiskuntaa näkemyksiä, ei sen enempää eikä vähempää.
Jos pidät luoda API käsin, laboring yli viimeinenkin URL, niin tämä on kehys sinulle. Jos haluat jotain hieman täysin varustellun, joka käsittelee luoda suuria swaths oman API Django malleja ja tuollaista, saanen ehdottaa, muutamia erinomaisia ​​puitteita: Tastypie, mäntä, ja Django REST.
Miten käytän sitä?
Ei ole mitään, se toimii aivan kuten voit odottaa sen --- olettaen olet perehtynyt Django luokan perusteella näkemyksiä. Katsotaanpa katsomaan esimerkki:
# ===============
# Views.py
# ===============
tuonti hyllyttämistä
tuonti json
alkaen django.http tuonti HttpResponse
levosta tuonti Resource
alkaen rest.exceptions tuoda HttpError
luokan MyResource (Resource):
& Nbsp; def saada (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; data = dict (db)
& Nbsp; db.close ()
& Nbsp; palata HttpResponse (json.dumps (data), content_type = "application / JSON", tila = 200)
& Nbsp; def lähettää (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; name = request.POST.get ('nimi', '')
& Nbsp; db [nimi] = true
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 201)
& Nbsp; def poistaa (itse, pyyntö, nimi):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; jos ei db.has_key (str (nimi)):
& Nbsp; db.close ()
& Nbsp; nostaa HttpError ("Nimi ei ole olemassa", tila = 404)
& Nbsp; del (db [nimi])
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 200)
Eli esimerkiksi views.py yllä, olemme tuotu Resource luokka, joka yksinkertaisesti perii Django View luokan ja antaa lisää kastikkeen saada kaikki HTTP menetelmiä toimi oikein. Sitten luomme uuden luokan, joka perii Resource luokan, ja me lisätä toiminnon uuden luokan käsittelemään jokaisen HTTP menetelmän että haluamme sallia. Ainoa vaatimus on, että funktion nimi on vastattava HTTP menetelmän nimi, niin saat tai GET varten GET puhelun ja niin edelleen. Yksinkertainen tarpeeksi, eikö? Joten katsotaanpas miten kytkeä voimavaramme:
# ===============
# Urls.py
# ===============
alkaen django.conf.urls tuonti malleja, muun muassa, url
alkaen .views tuonti MyResource
urlpatterns = kuviot ('',
& Nbsp; url (r ^ API / resurssin /? $ ', MyResource.as_view ()),
& Nbsp; url (r ^ API / resurssin / (? P [AZ az -] +) /? $ ', MyResource.as_view ()),
)
Näyte urls.py edellä osoittaa kuinka mentäisiin luomisesta URL kaavoja esimerkissä voimavara. Jälleen, jos olet perehtynyt Django luokan perusteella näkemyksiä, ei pitäisi olla mitään yllätyksiä täällä.
Authentication
Entä todennus? No, voit yksinkertaisesti käyttää method_decorator toimivat Django docs ehdottaa sisustaa jokaisen menetelmän lähteesi kanssa sopiva autentikointi sisustajalle. Olettaen haluat koko resurssi suojattu voit myös koristella tulos puhelun as_view vuonna URLconf. Molemmat vaihtoehdot ovat täysin voimassa ja voit vapaasti käyttää niitä, tässä yhteydessä ei tarjota toinen vaihtoehto, mutta.
Vuonna rest.auth.decorators moduulissa huomaat sisustussuunnittelijan siellä, että voit lisätä autentikoinnin resursseja. Katsotaanpa katsomaan muutamia esimerkkejä käyttämällä mallikoodi ylhäältä:
# ===============
# Views.py
# ===============
tuonti hyllyttämistä
tuonti json
alkaen django.http tuonti HttpResponse
levosta tuonti Resource
alkaen rest.exceptions tuoda HttpError
alkaen rest.auth.decorators tuontituotteet login_required, admin_required
luokan MyResource (Resource):
& Nbsp; def saada (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; data = dict (db)
& Nbsp; db.close ()
& Nbsp; palata HttpResponse (json.dumps (data), content_type = "application / JSON", tila = 200)
& Nbsp;login_required
& Nbsp; def lähettää (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; name = request.POST.get ('nimi', '')
& Nbsp; db [nimi] = true
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 201)
& Nbsp;admin_required
& Nbsp; def poistaa (itse, pyyntö, nimi):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; jos ei db.has_key (str (nimi)):
& Nbsp; db.close ()
& Nbsp; nostaa HttpError ("Nimi ei ole olemassa", tila = 404)
& Nbsp; del (db [nimi])
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 200)
Olettaen, että emme välitä, jos joku näkee meidän kokoelma nimiä, voimme jättää että yksi sellaisenaan, mutta Oletetaan, että meillä on tiukat vaatimukset, jotka voivat lisätä ja poistaa nimiä. Jos oletetaan, että vain rekisteröityneet käyttäjät voivat lisätä nimiä, lisäämme login_required sisustusarkkitehti virkaan menetelmällä. Emme pahastu, jos mitään jäsenillemme lisätä uusia nimiä, mutta emme halua nimeään vahingossa poistetaan tietokannastamme, joten katsotaanpa koristella että yksi erilaiseksi admin_required sisustajalle. admin_required yksinkertaisesti varmistaa, että käyttäjä on kirjautunut sisään ja on erittäin käyttäjä ennen kuin ne myönnetään pääsy näkymä toiminnon.
Nyt tämä voi saada hieman tylsiä, jos meillä on paljon resursseja ja ne kaikki ovat yleensä samat todennusvaatimukset. Joten, todennus sisustussuunnittelijan työtä sekä luokkia ja metodeja. Alla olevassa esimerkissä olemme lisäämällä pääkäyttäjä vaatimus jokaisen menetelmän tarjoama resurssi yksinkertaisesti koristelu resurssi luokka:
# ===============
# Views.py
# ===============
tuonti hyllyttämistä
tuonti json
alkaen django.http tuonti HttpResponse
levosta tuonti Resource
alkaen rest.exceptions tuoda HttpError
alkaen rest.auth.decorators tuonti admin_required
admin_required
luokan MyResource (Resource):
& Nbsp; def saada (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; data = dict (db)
& Nbsp; db.close ()
& Nbsp; palata HttpResponse (json.dumps (data), content_type = "application / JSON", tila = 200)
& Nbsp; def lähettää (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; name = request.POST.get ('nimi', '')
& Nbsp; db [nimi] = true
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 201)
& Nbsp; def poistaa (itse, pyyntö, nimi):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; jos ei db.has_key (str (nimi)):
& Nbsp; db.close ()
& Nbsp; nostaa HttpError ("Nimi ei ole olemassa", tila = 404)
& Nbsp; del (db [nimi])
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 200)
Ennen jätämme aihe autentikointi sisustussuunnittelijan on kaksi muuta kohdetta Haluaisin huomauttaa. Ensimmäinen, toinen hyvä syy käyttää kehyksen autentikointi sisustussuunnittelijan mahdollisuuksien on, että kun todennus epäonnistuu he palaavat oikea vastaus RESTful näkökulmasta. Tyypillinen Django todennus sisustussuunnittelijan yrittää ohjaa käyttäjän kirjautumissivulle. Vaikka tämä on suuri, kun olet verkkosivun, kun päästä resurssi tahansa muu asiakas, saa 401 (luvaton) on ensisijainen vastaus ja joka palautetaan käytettäessä Yksinkertainen REST todennusta sisustussuunnittelijan.
Muu kohde haluan mainita on signature_required autentikointi sisustajalle. Monet API käyttää turvallisella allekirjoituksen tunnistaa käyttäjä ja niin olemme lisänneet todennus sisustajalle, joka lisää, että toimintoja resursseja. Signature_required sisustaja odottaa että HMAC määritelty RFC 2104, lähetetään HTTP-pyynnön, jotta käyttäjän todentamiseen. Hmac rakentuu käyttäjän salainen avain, joten siellä on oltava tapa signature_required sisustusarkkitehti saada että salainen avain ja että tehdään antamalla sisustaja toiminto, joka vie Django HttpRequest esine ja rajoittamattoman määrän sijoitteluun ja avainsanan perustelut määrittelemän URLconf. Katsotaanpa katsomaan esimerkki käyttää signature_required sisustusarkkitehti kanssa näytteen resurssi koodi:
# ===============
# Views.py
# ===============
tuonti hyllyttämistä
tuonti json
alkaen django.http tuonti HttpResponse
levosta tuonti Resource
alkaen rest.exceptions tuoda HttpError
alkaen rest.auth.decorators tuoda signature_required
def secret_key (pyynnöstä * args, ** kwargs):
& Nbsp; user = User.objects.get (pk = kwargs.get (UID))
& Nbsp; paluu user.secret_key
signature_required (secret_key)
luokan MyResource (Resource):
& Nbsp; def saada (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; data = dict (db)
& Nbsp; db.close ()
& Nbsp; palata HttpResponse (json.dumps (data), content_type = "application / JSON", tila = 200)
& Nbsp; def lähettää (itse, pyyntö, * args, ** kwargs):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; name = request.POST.get ('nimi', '')
& Nbsp; db [nimi] = true
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 201)
& Nbsp; def poistaa (itse, pyyntö, nimi):
& Nbsp; db = shelve.open ('/ tmp / db)
& Nbsp; jos ei db.has_key (str (nimi)):
& Nbsp; db.close ()
& Nbsp; nostaa HttpError ("Nimi ei ole olemassa", tila = 404)
& Nbsp; del (db [nimi])
& Nbsp; db.sync ()
& Nbsp; db.close ()
& Nbsp; return HttpResponse (tila = 200)
Mukana on myös toinen sisustusarkkitehti kutsutaan auth_required joka toimii samalla tavalla kuin signature_required (eli se vie funktio, joka palauttaa salainen avain samoin), mutta edellyttää, että käyttäjä on joko kirjautuneena tai on kelvollinen allekirjoitus ennen heille pääsy resurssi.
Lopuksi, jos käytät signature_required tai auth_required sisustusarkkitehti koodissa ja tarvitsevat vähän ylimääräistä apua virheenkorjaus resursseja, erityisesti tarvitset apua tuottaa turvallisen allekirjoituksen, Simple REST tarjoaa mukautetun komennon nimeltä urlencode joka vie datajoukkoa avaimen / arvo-pareja, ja lisävarusteena salaisen avaimen ja palauttaa URL koodattu merkkijono, jonka voit kopioida ja liittää suoraan cURL komento tai muu hyödyllinen työkalu kuten REST Console Chrome. Esimerkki siitä, miten käyttää urlencode komento on lueteltu alla:
% Python manage.py urlencode --secret-avain = testi foo = 1 bar = 2 Baz = 3 name = 'Maxwell Hammer "
Form Validation
Jos haluat käyttää lomaketta validoida tiedot REST pyynnöstä (esim POST luoda uusi resurssi) voit törmätä joitakin ongelmia käyttäen Django ModelForm luokassa. Erityisesti Oletetaan, että sinulla on malli, joka on useita valinnaisia ​​määritteitä oletusarvot määritetty. Jos lähetät pyynnön luoda uusi esiintymä tämän luokan, mutta sisältää vain tietoja kourallinen valinnaisia ​​määritteitä, voit odottaa, että lomakkeen objektin luot ei onnistu validointi koska säästö esine merkitsisi, että uusi ennätys olisi yksinkertaisesti päätyä oletusarvot puuttuvia ominaisuuksia. Tämä ei kuitenkaan ole asian laita Django ModelForm luokassa. Se odottaa nähdä kaikki tiedot jokaisen pyynnön ja epäonnistuu, jos mitään puuttuu.
Voit ratkaista tämän ongelman, Simple REST kehys tarjoaa ModelForm luokassa rest.forms että perii Django ModelForm ja alustaa saapuvan pyynnön oletus arvot taustalla mallikohteesta puuttuvat määritteitä. Tämä mahdollistaa muodossa validointi toimimaan oikein ja uusi objekti tallennetaan vain osan koko joukko ominaisuuksia lähetettävä pyynnöstä. Voit käyttää luokan yksinkertaisesti tuoda sen sijaan normaalin Django ModelForm ja pyydä lomake luokan perivät siitä sijaan Django.
Tulevat
Pidä hakevat päivitykset puitteissa. Vaikka se on alun perin luotu ajatukseen vain minimiin tarvitaan käyttää Django luokkapohjaiset näkemyksiä luoda rauhallista API, on vielä muutamia kivoja ominaisuuksia, jotka olemme lisäämässä jotka mielestämme kohteliaisuus puitteet hyvin kun vielä uskollisia minimalistinen ihanteita. Mielenkiintoisin näistä päivityksistä on lisätty automaattisen sisältöneuvottelua vastauksia palasi varoista.

Vaatimukset :

  • Python
  • Django

Kommentit django-simple-rest

Kommentteja ei löytynyt
Lisää kommentti
Ota kuvia!