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'
进行测试.