django用serializers.Serializer方式序列化

django用serializers.Serializer方式序列化

1.新建一个Django项目book,再start一个users.
2.打开项目安装django rest framework及其依赖包:

pip install djangorestframework markdown django-filter

3.在setting中注册:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users.apps.UsersConfig',
    'rest_framework'
]

4.设计users的models.py,重构用户表UserProfile,增加字段APIKey和money

from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime

class UserProfile(AbstractUser):
    APIKey=models.CharField(max_length=30,verbose_name='APIKey',default='abcdefghijklmn')
    money=models.IntegerField(default=10,verbose_name='余额')
    class Meta:
        verbose_name='用户'
        verbose_name_plural=verbose_name
        def __str__(self):
            return self.username

5.在setting中配置用户表的继承代码

AUTH_USER_MODEL='users.UserProfile'

6.在users的models.py文件中新建书籍信息表book:

class Book(models.Model):
    title=models.CharField(max_length=30,verbose_name='书名',default='')
    isbn= models.CharField(max_length=30, verbose_name='isbn', default='')
    author=models.CharField(max_length=30,verbose_name='作者',default='')
    publish=models.CharField(max_length=30,verbose_name='出版社',default='')
    rate=models.FloatField(default=0,verbose_name='豆瓣评分')
    add_time=models.DateTimeField(default=datetime.now,verbose_name='添加时间')
    class Meta:
        verbose_name='书籍信息'
        verbose_name_plural=verbose_name
        def __str__(self):
            return self.title

7.执行数据更新:

python manage.py makemigrations
python manage.py migrate

8.新建一个超级用户

python manage.py createsuperuser  'username'  'email'

9.在book表中增加一条记录
10.在users目录下新建serializers.py:

from  rest_framework import serializers
from .models import UserProfile,Book
class BookSerializer(serializers.Serializer):
    title=serializers.CharField(required=True,max_length=100)
    isbn=serializers.CharField(required=True,max_length=100)
    author=serializers.CharField(required=True,max_length=100)
    publish=serializers.CharField(required=True,max_length=100)
    rate=serializers.FloatField(default=0)

11.在users/views中:

from django.shortcuts import render
from .serializers import BookSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import UserProfile,Book


class BookAPIView1(APIView):
    def get(self,request,format=None):
        APIKey=self.request.query_params.get('apikey',0)
        developer=UserProfile.objects.filter(APIKey=APIKey).first()
        if developer:
            balance=developer.money
            if balance>0:
                isbn=self.request.query_params.get('isbn',0)
                books=Book.objects.filter(isbn=int(isbn))
                books_serializer=BookSerializer(books,many=True)
                developer.money-=1
                developer.save()
                return Response(books_serializer.data)
            else:
                return Response('兄弟,又到需要充钱的时候!')
        else:
            return Response('查无此人啊!')

12.在urls中配置路由:

from django.contrib import admin
from django.urls import path
from users.views import BookAPIView1

urlpatterns = [
    path('admin/', admin.site.urls),
    path('apibook1/',BookAPIView1.as_view(),name='book1')
]

最后用postman

http://127.0.01:8000/apibook1/?apikey='name'&isbn='isbn'

进行测试.

你可能感兴趣的:(python,django,django,python)