A route:
from django.contrib import admin from api import views from django.views.static import serve from d_proj import settings urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^api1/', include('api1.urls')), url(r'^media/(?P<path>.*)', serve, {'document_root':settings.MEDIA_ROOT}),]
Two routes
from django.conf.urls import url from django.contrib import admin from api1 import views urlpatterns = [ url(r'^users/$', views.Users.as_view()), url(r'^users/(?P<pk>\d+)/$', views.Users.as_view()), ]
models.py
from django.db import models class User(models.Model): CHOICE_SEX = ( (0, '男'), (1, '女') ) name = models.CharField(max_length=32, verbose_name="姓名") pwd = models.CharField(max_length=32,verbose_name="密码") sex = models.SmallIntegerField(choices=CHOICE_SEX, default=0) create_time = models.DateTimeField(auto_now_add=True, blank=True) is_delete = models.BooleanField(default=False) class Meta: db_table = 'F_user' verbose_name_plural = "用户名" def __str__(self): return self.name
views.py
# Write restful interface is based on django Rest Framework framework DRF # DRF use: # 1 in setting.py in the rest_framework added to the app in # 2, you write all written CBV, inherited APIView # APIview Why rest_framework of? From rest_framework.views Import APIView from rest_framework.response Import the Response from .api1_serializer Import UserSerializer, UserDserializer from API1 Import Models from rest_framework.request Import Request from django.http Import Request classThe Users (APIView): back_dic = { ' Status ' : None, ' MSG ' : '' , ' Result ' : {} } # Get all resources DEF GET (Self, Request, * args, ** kwargs): PK = kwargs .get ( ' PK ' , None) IF PK: # obtaining a users_query = models.User.objects.filter (PK = PK, is_delete = False) the else : users_query= models.User.objects.filter(is_delete=False).all() if users_query: # instance = query_list , many=True # instance = query_obj, many=False userser = UserSerializer(instance=users_query, many=True) self.back_dic['result'] = userser.data self.back_dic['msg'] = '查询成功' self.back_dic['status'] = '0' else: self.back_dic[' MSG ' ] = ' query fails, the search does not exist ' self.back_dic [ ' Status ' ] = ' . 1 ' return the Response (self.back_dic) # add a resource DEF POST (Self, Request, args *, ** kwargs): # models.User.objects.create (** request.data) # stored data needs to be verified before data can define a series of anti-class, user_deser = UserDserializer (data = request.data) # when raise_exception = True to directly verify the information back to the front desk unlawful # user_deser.is_valid (raise_exception = True) IF user_deser.is_valid (): #Must pass before they can call to check anti-serialization class to write their own create method # direct transfer method create your own, you can also adjust the save method, the method will save the create method to tune # RET = user_deser.create (user_deser.validated_data) RET = user_deser.save () self.back_dic [ ' Status ' ] = 0 self.back_dic [ ' MSG ' ] = ' new success ' self.back_dic [ ' Result ' ] = UserSerializer (= instance RET) .data return the Response ( self.back_dic) the else : self.back_dic [ ' Status' ] =. 1 self.back_dic [ ' MSG ' ] = ' Add failed ' self.back_dic [ ' Result ' ] = user_deser.errors return the Response (self.back_dic) # update a need to customize the update method DEF PUT (Self , Request, * args, ** kwargs): # modified object query_list] [ # update_query = models.User.objects.filter (kwargs.get PK = ( 'PK', None)) # user_ser = UserDserializer (= update_query instance , Data = request.data) # modified object [] query_obj = models.User.objects.filter update_query_obj (kwargs.get PK = ( ' PK ' ., None)) First () user_ser = UserDserializer (= update_query_obj instance, Data = request.data) IF user_ser.is_valid (): # ret_query user_ser.update = (= update_query instance, validated_data = user_ser.validated_data) # directly update their modulation method, may be adjusted save method, you will save method to create modulation method ret_query = user_ser.save () self.back_dic [ ' Status ' ] = 0 self.back_dic [ ' MSG ' ] = ' update success ' # 【query_list】 # self.back_dic['result'] = UserSerializer(instance=ret_query, many=True).data #[query_obj] self.back_dic['result'] = UserSerializer(instance=ret_query,many=False).data else: self.back_dic['status'] = 1 self.back_dic['msg'] = '更新失败' self.back_dic['result'] = user_ser.errors return Response(self.back_dic) def delete(self, request, *args, **kwargs): models.User.objects.filter(pk=kwargs.get('pk'), is_delete=False).update(is_delete=True) return Response('delete ok')
Serialization and anti-serialization
from rest_framework Import serializers from . Import Models class UserSerializer (serializers.Serializer): name = serializers.CharField () pwd = serializers.CharField () the create_time = serializers.DateTimeField () Gender = serializers.SerializerMethodField () # can be custom serialization properties (Model class attributes and does not require synchronization) DEF get_gender (self, obj): # obj involved serialized class object Model # return obj.sex 0 or # 1 # return value of the function corresponds to a custom data sequence the value of the return obj.get_sex_display () class UserDserializer (serializers.Serializer): name = serializers.CharField (= 32 MAX_LENGTH, min_length = 2, error_messages, = { ' MAX_LENGTH ' : ' name too long ' , ' min_length ' : ' name is too short ' , }) pwd = serializers .CharField (MAX_LENGTH = 32 ) Gender = serializers.IntegerField (Source = ' Sex ' ) # does not allow verification = False the requires the create_time = serializers.DateTimeField (required = False) # is not necessary #Model class object to provide new interface function for post DEF Create (Self, validated_data): Print ( ' Create been performed ' ) Re = models.User.objects.create (** self.validated_data) # objects need to be created trying to return to the function that returns to the foreground return Re # to put provide updates Model class object DEF update (Self, instance, validated_data): # update QUERY_LIST # instance.update (** validated_data) instance.name = validated_data.get ( ' name ' ) instance.pwd = validated_data.get ( ' pwd') instance.sex = validated_data.get('sex') instance.save() return instance