±à¼ÍƼö: |
À´Ô´ÓÚ»úÆ÷ѧϰËã·¨ÓëPythonѧϰ£¬½éÉÜÁËʲôÊÇrest£¬api
¶¨Ò广·¶£¬httpÇëÇó·½Ê½£¬×´Ì¬ÂëµÈ¡£ |
|
ʲôÊÇrest
RESTÊÇËùÓÐWebÓ¦Óö¼Ó¦¸Ã×ñÊØµÄ¼Ü¹¹Éè¼ÆÖ¸µ¼ÔÔò¡£
Representational State Transfer£¬·ÒëÊÇ¡±±íÏÖ²ã״̬ת»¯¡±¡£
ÃæÏò×ÊÔ´ÊÇREST×îÃ÷ÏÔµÄÌØÕ÷£¬¶ÔÓÚͬһ¸ö×ÊÔ´µÄÒ»×鲻ͬµÄ²Ù×÷¡£×ÊÔ´ÊÇ·þÎñÆ÷ÉÏÒ»¸ö¿ÉÃüÃûµÄ³éÏó¸ÅÄ×ÊÔ´ÊÇÒÔÃû´ÊΪºËÐÄÀ´×éÖ¯µÄ£¬Ê×ÏȹØ×¢µÄÊÇÃû´Ê¡£
RESTÒªÇ󣬱ØÐëͨ¹ýͳһµÄ½Ó¿ÚÀ´¶Ô×ÊÔ´Ö´Ðи÷ÖÖ²Ù×÷¡£¶ÔÓÚÿ¸ö×ÊÔ´Ö»ÄÜÖ´ÐÐÒ»×éÓÐÏ޵IJÙ×÷¡£
GETÓÃÀ´»ñÈ¡×ÊÔ´£¬POSTÓÃÀ´Ð½¨×ÊÔ´£¨Ò²¿ÉÒÔÓÃÓÚ¸üÐÂ×ÊÔ´£©£¬PUT(PATCH)ÓÃÀ´¸üÐÂ×ÊÔ´£¬DELETEÓÃÀ´É¾³ý×ÊÔ´¡£
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Öж¨ÒåºÃ²ÅÐÐ |