创建django应用,以及安装Django-REST-framework就不多说了。
books/models.py
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=50, verbose_name="书籍名称") price = models.IntegerField(verbose_name="书籍价格") pub_date = models.DateField(verbose_name="出版日期") reading_quantity = models.IntegerField(verbose_name="阅读量") comments = models.IntegerField(verbose_name="评论量") publish = models.ForeignKey("Publish", on_delete=models.CASCADE, verbose_name="出版社名称") authors = models.ManyToManyField("Author", verbose_name="作者") class Meta: verbose_name = "书籍信息" verbose_name_plural = verbose_name def __str__(self): return self.title class Publish(models.Model): name = models.CharField(max_length=50, verbose_name="出版社名称") pub_email = models.EmailField(verbose_name="出版社邮箱") class Meta: verbose_name = "出版社信息" verbose_name_plural = verbose_name def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50, verbose_name="作者名称") age = models.IntegerField(verbose_name="作者年龄") author_email = models.EmailField(verbose_name="作者邮箱") class Meta: verbose_name = "作者信息" verbose_name_plural = verbose_name def __str__(self): return self.name
books/urls.py
from django.urls import path, re_path, include from rest_framework.routers import DefaultRouter from .views import AuthorView, AuthorDetailView,PublishView,PublishDetailView # router = DefaultRouter() # urlpatterns = [] # # router.register("author", ) # # urlpatterns += router.urls urlpatterns = [ path('author/', AuthorView.as_view()), re_path("author/(\d+)", AuthorDetailView.as_view()), path("publish/", PublishView.as_view()), re_path("publish/(\d+)", PublishDetailView.as_view()), ]
books/views.py
查询所有作者,及 新增作者
class AuthorView(APIView): def get(self, request): authors = Author.objects.all() serializer = AuthorSerializer(instance=authors, many=True) return Response(serializer.data) def post(self, request): serializer = AuthorSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors)
books/apps.py
from django.apps import AppConfig class BooksConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'books' verbose_name = "书籍管理"
books/admin.py
from django.contrib import admin from .models import Author, Book, Publish # Register your models here. class AuthorAdmin(admin.ModelAdmin): list_display = ('name', 'age', 'author_email') class BookAdmin(admin.ModelAdmin): list_display = ('title', 'price', 'pub_date', 'comments', 'publish') class PublishAdmin(admin.ModelAdmin): list_display = ('name', 'pub_email') admin.site.register(Author, AuthorAdmin) admin.site.register(Book, BookAdmin) admin.site.register(Publish, PublishAdmin)
books/serializers.py
from rest_framework import serializers from books.models import Author, Publish # ########### AuthorSerializer ############# class AuthorSerializer(serializers.Serializer): name = serializers.CharField(max_length=50) age = serializers.IntegerField() author_email = serializers.EmailField() def update(self, instance, validated_data): Author.objects.filter(pk=instance.pk).update(**validated_data) return instance def create(self, validated_data): author = Author.objects.create(**validated_data) return author # ########### AuthorModelSerializer ############# class AuthorModelSerializer(serializers.ModelSerializer): class Meta: model = Author fields = "__all__" # ########### PublishModelSerializer ############# class PublishModelSerializer(serializers.ModelSerializer): class Meta: model = Publish fields = "__all__"