Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
DjangoµÄrestfulÓ÷¨£¨×Ô´øµÄÔöɾ¸Ä²é£©
 
  4975  次浏览      29
 2018-7-6 
 
±à¼­ÍƼö:
À´Ô´ÓÚ»úÆ÷ѧϰËã·¨ÓëPythonѧϰ£¬½éÉÜÁËʲôÊÇrest£¬api ¶¨Ò广·¶£¬httpÇëÇó·½Ê½£¬×´Ì¬ÂëµÈ¡£

ʲôÊÇrest

RESTÊÇËùÓÐWebÓ¦Óö¼Ó¦¸Ã×ñÊØµÄ¼Ü¹¹Éè¼ÆÖ¸µ¼Ô­Ôò¡£

Representational State Transfer£¬·­ÒëÊÇ¡±±íÏÖ²ã״̬ת»¯¡±¡£

ÃæÏò×ÊÔ´ÊÇREST×îÃ÷ÏÔµÄÌØÕ÷£¬¶ÔÓÚͬһ¸ö×ÊÔ´µÄÒ»×鲻ͬµÄ²Ù×÷¡£×ÊÔ´ÊÇ·þÎñÆ÷ÉÏÒ»¸ö¿ÉÃüÃûµÄ³éÏó¸ÅÄ×ÊÔ´ÊÇÒÔÃû´ÊΪºËÐÄÀ´×éÖ¯µÄ£¬Ê×ÏȹØ×¢µÄÊÇÃû´Ê¡£

RESTÒªÇ󣬱ØÐëͨ¹ýͳһµÄ½Ó¿ÚÀ´¶Ô×ÊÔ´Ö´Ðи÷ÖÖ²Ù×÷¡£¶ÔÓÚÿ¸ö×ÊÔ´Ö»ÄÜÖ´ÐÐÒ»×éÓÐÏ޵IJÙ×÷¡£

GETÓÃÀ´»ñÈ¡×ÊÔ´£¬POSTÓÃÀ´Ð½¨×ÊÔ´£¨Ò²¿ÉÒÔÓÃÓÚ¸üÐÂ×ÊÔ´£©£¬PUT(PATCH)ÓÃÀ´¸üÐÂ×ÊÔ´£¬DELETEÓÃÀ´É¾³ý×ÊÔ´¡£

api¶¨Ò广·¶

http://xxx.com/api/

×ÊÔ´

ÔÚRESTful¼Ü¹¹ÖУ¬Ã¿¸öÍøÖ·´ú±íÒ»ÖÖ×ÊÔ´£¨resource£©£¬ËùÒÔÍøÖ·Öв»ÄÜÓж¯´Ê£¬Ö»ÄÜÓÐÃû´Ê£¬¶øÇÒËùÓõÄÃû´ÊÍùÍùÓëÊý¾Ý¿âµÄ±í¸ñÃû¶ÔÓ¦¡£Ò»°ãÀ´Ëµ£¬Êý¾Ý¿âÖÐµÄ±í¶¼ÊÇͬÖּǼµÄ¡±¼¯ºÏ¡±£¨collection£©£¬ËùÒÔAPIÖеÄÃû´ÊÒ²Ó¦¸ÃʹÓø´Êý¡£

¾ÙÀýÀ´Ëµ£¬ÓÐÒ»¸öAPIÌṩ¶¯ÎïÔ°£¨zoo£©µÄÐÅÏ¢£¬»¹°üÀ¨¸÷ÖÖ¶¯ÎïºÍ¹ÍÔ±µÄÐÅÏ¢£¬ÔòËüµÄ·¾¶Ó¦¸ÃÉè¼Æ³ÉÏÂÃæÕâÑù¡£

https: //api.example.com/v1/zoos
https: //api.example.com/v1/animals
https: //api.example.com/v1/employees

httpÇëÇó·½Ê½

GET£¨SELECT£©£º´Ó·þÎñÆ÷È¡³ö×ÊÔ´£¨Ò»Ïî»ò¶àÏ
POST£¨CREATE£©£ºÔÚ·þÎñÆ÷н¨Ò»¸ö×ÊÔ´
PUT£¨UPDATE£©£ºÔÚ·þÎñÆ÷¸üÐÂ×ÊÔ´£¨¿Í»§¶ËÌṩ¸Ä±äºóµÄÍêÕû×ÊÔ´£©
PATCH£¨UPDATE£©£ºÔÚ·þÎñÆ÷¸üÐÂ×ÊÔ´£¨¿Í»§¶ËÌṩ¸Ä±äµÄÊôÐÔ£©
DELETE£¨DELETE£©£º´Ó·þÎñÆ÷ɾ³ý×ÊÔ´

filter¹ýÂË

?page = 2&per_ page = 100£ºÖ¸¶¨µÚ¼¸Ò³£¬ÒÔ¼°Ã¿Ò³µÄ¼Ç¼Êý¡£
?sortby = name & order=asc£ºÖ¸¶¨·µ»Ø½á¹û°´ÕÕÄĸöÊôÐÔÅÅÐò£¬ÒÔ¼°ÅÅÐò˳Ðò¡£
?animal_ type_ id =1£ºÖ¸¶¨É¸Ñ¡Ìõ¼þ

״̬Âë

·þÎñ¶ËÏòÓû§·µ»ØÇëÇóapiµÄ½á¹û£¬ÔÚ½á¹ûÖаüº¬ÁËstatus codes ״̬ÂëµÄ£¬¿ÉÒÔͨ¹ý״̬ÂëÈ¥ÅжÏÇëÇóapiµÄ״̬Êdzɹ¦»¹ÊÇʧ°Ü

200 OK - [GET]£º·þÎñÆ÷³É¹¦·µ»ØÓû§ÇëÇóµÄÊý¾Ý£¬¸Ã²Ù×÷ÊÇÃݵȵģ¨Idempotent£©¡£
201 CREATED - [POST/PUT/PATCH]£ºÓû§Ð½¨»òÐÞ¸ÄÊý¾Ý³É¹¦¡£
202 Accepted - [*]£º±íʾһ¸öÇëÇóÒѾ­½øÈëºǫ́ÅŶӣ¨Òì²½ÈÎÎñ£©
204 NO CONTENT - [DELETE]£ºÓû§É¾³ýÊý¾Ý³É¹¦¡£
400 INVALID REQUEST - [POST/PUT/PATCH]£ºÓû§·¢³öµÄÇëÇóÓдíÎ󣬷þÎñÆ÷ûÓнøÐÐн¨»òÐÞ¸ÄÊý¾ÝµÄ²Ù×÷£¬¸Ã²Ù×÷ÊÇÃݵȵġ£
401 Unauthorized - [*]£º±íʾÓû§Ã»ÓÐȨÏÞ£¨ÁîÅÆ¡¢Óû§Ãû¡¢ÃÜÂë´íÎ󣩡£
403 Forbidden - [*] ±íʾÓû§µÃµ½ÊÚȨ£¨Óë401´íÎóÏà¶Ô£©£¬µ«ÊÇ·ÃÎÊÊDZ»½ûÖ¹µÄ¡£
404 NOT FOUND - [*]£ºÓû§·¢³öµÄÇëÇóÕë¶ÔµÄÊDz»´æÔڵļǼ£¬·þÎñÆ÷ûÓнøÐвÙ×÷£¬¸Ã²Ù×÷ÊÇÃݵȵġ£
406 Not Acceptable - [GET]£ºÓû§ÇëÇóµÄ¸ñʽ²»¿ÉµÃ£¨±ÈÈçÓû§ÇëÇóJSON¸ñʽ£¬µ«ÊÇÖ»ÓÐXML¸ñʽ£©¡£
410 Gone -[GET]£ºÓû§ÇëÇóµÄ×ÊÔ´±»ÓÀ¾Ãɾ³ý£¬ÇÒ²»»áÔٵõ½µÄ¡£
422 Unprocesable entity - [POST/PUT/PATCH] µ±´´½¨Ò»¸ö¶ÔÏóʱ£¬·¢ÉúÒ»¸öÑéÖ¤´íÎó¡£
500 INTERNAL SERVER ERROR - [*]£º·þÎñÆ÷·¢Éú´íÎó£¬Óû§½«ÎÞ·¨ÅжϷ¢³öµÄÇëÇóÊÇ·ñ³É¹¦¡£

¾ßÌåÓ÷¨

¸ü¶àµÄÐèÒªÅäºÏpostman Òò´ËÐèÒªÏÂÔØÒ»¸öpostman£¬·½±ã¸ü¶àµÄ²Ù×÷

https: //www.getpostman.com /apps

ʹÓÃ֮ǰ°²×°Ä£¿é

pip install djangorestframework
pip install django- filter

ÔÚsetting.pyÖмÓÈë²ÎÊý

INSTALLED_ APPSÖмÓÈ롯rest_ framework¡¯£¬

ÔÚappÖд´½¨Ò»¸öpyÎļþ¡ª¡ªÐòÁл¯Îļþ

±ÈÈçserializers.pyÈ»ºóдÈërestful

from rest_framework import serializers
from stu .models import Student£¨µ¼Èë×Ô¼ºÐ´µÄapp ¡¢ models£©
class StudentSerializer (serializers . Model Serializer ):
class Meta:
# ¹ØÁªÊý¾Ý±í£¨Ç°Ãæ²»ÊDZäÁ¿Ãû£©
model = Student
# È·¶¨ÐèÒªÐòÁл¯µÄ×ֶΣ¨·µ»Ø¸øÓû§µÄ¾ßÌå±íÖеÄ×ֶΣ©£¨Ç°Ãæ²»ÊDZäÁ¿Ãû£©
fields = ['id', 's_name', 's_tel']
def to_representation (self, instance):
data = super().to_ representation(instance)
try :
# µÃµ½¹ØÁª±íÖеÄ×ֶΣ¬±ØÐëÓÃtry,·ñÔòÈç¹û´æÔÚÒ»¸öûÓж¨Òåi_ addrµÄѧÉúʱ£¬ÏµÍ³½«±¨´í
data ['s_addr'] = instance.studentinfo.i_addr
except Exception as e:
data['s_addr'] = ''
return data

ÔÚappÖÐviewsÖд´½¨Àà

from rest_framework import mixins,viewsets
from stu.serializers import StudentSerializer
from stu.models import Student
class StudentEdit (mixins.ListModelMixin,# ±íʾ¿ÉÒÔÔÚPostman ÀàËÆµÄÈí¼þÖÐÖ»ÄܲéÕÒËùÓÐÊý¾Ý
viewsets.GenericViewSet,
mixins.RetrieveModelMixin, # ±íʾ¿ÉÒÔÔÚPostmanÀàËÆµÄÈí¼þÖÐÖ»ÄܲéÕÒµ¥Ò»Êý¾Ý
mixins.UpdateModelMixin, # ±íʾ¿ÉÒÔÔÚPostmanÀàËÆµÄÈí¼þÖиüÐÂÊý¾Ý
mixins.DestroyModelMixin , # ±íʾ¿ÉÒÔÔÚPostmanÀàËÆµÄÈí¼þÖÐɾ³ýÊý¾Ý
mixins.CreateModelMixin): # ±íʾ¿ÉÒÔÔÚPostmanÀàËÆµÄÈí¼þÖд´½¨Êý¾Ý
# ²éѯËùÓÐÐÅÏ¢
queryset = Student.objects.all()
# ÐòÁл¯
serializer_ class = StudentSerializer

´´½¨urls

ÕâÀïͬʱչʾÁËurls²»Ò»¶¨Ã¿´Î¶¼Ð´Èë½øÈ¥¿ÉÒÔÓÃ+=Ìí¼Ó½øÈ¥

×¢ÒâÕâÀïдµÄurls²»Òª¼Ó¡®/¡¯Ëû»á×Ô¶¯¼ÓÔØ

from stu import views
from rest_ framework.routers import SimpleRouter router = SimpleRouter()
router.register (r'student', views .StudentEdit)
urlpatterns = [
# ÆäËûurl
]
urlpatterns += router.urls #ÕâÀï±íʾÌí¼Ó¶¨ÒåµÄurl

¶ÔÓ¦µÄ·½·¨

ÔÚpostmanÖÐÑ¡Èëij¸ö²ÎÊýÈ»ºó´«Èëij¸öurls¼´¿É

Ôö£º POST http://127.0.0.1:8080/stu/addStu/1/
ɾ£º DELETE http://127.0.0.1:8080/stu/addStu/1/
¸Ä£º UPDATE http://127.0.0.1:8080/stu/addStu/1/
²é£º GET http://127.0.0.1:8080/stu/addStu/1

ÄÜÖ´ÐÐÕâЩ²Ù×÷ǰ¶¼ÐèÒªÔÚviewsÖж¨ÒåºÃ²ÅÐÐ

   
4975 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ