主要应用技术点:
1.使用序列化器
2.定义路由
创建项目
django-admin startproject DRSproject
cd DRSproject
django-admin startapp bookmark
1.修改settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 添加'rest_framework' 包
'bookmark', # 添加app
]
...
2.创建bookinfo模型,编辑bookmark/models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class BookInfo(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
published_time = models.DateTimeField(auto_now_add=True)
last_updated_time = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User,related_name='boo
3.定义序列化器,在bookmark目录下新建一个serializer.py文件,与models.py同级
'''
定义一个序列化器
'''
from rest_framework import serializers
from .models import BookInfo
class BookInfoSerializer(serializers.ModelSerializer):
'''
书籍 数据序列化器
serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义。serializer是独立于数据库之外的存在。
'''
title = serializers.CharField(max_length=50)
content = serializers.CharField()
published_time = serializers.DateTimeField()
last_updated_time = serializers.DateTimeField()
class Meta:
model = BookInfo # 指明该序列化器处理的数据字段从模型类BookInfo参考生成
fields = '__all__' # 指明该序列化器包含模型类中的哪些字段,'__all__'指明包含所有字段
'''
定义好Serializer类之后,就可以创建Serializer对象了。
Serializer的构造方法为:
Serializer(instance=None, data=empty, **kwarg)
说明:
1)用于序列化时,将模型类对象传入instance参数
2)用于反序列化时,将要被反序列化的数据传入data参数
3)除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如
serializer = AccountSerializer(account, context={'request': request})
通过context参数附加的数据,可以通过Serializer对象的context属性获取。
'''
3.修改根路由文件,urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('bookmark/',include('bookmark.urls')), # 将app的路由包括进根路由
]
4.在bookmark目录下,新建一个urls.py作为子应用的路由文件
from . import views
from rest_framework.routers import DefaultRouter
urlpatterns=[
]
router = DefaultRouter() # 可以处理视图的路由器
router.register(r'books',views.BookInfoViewSet) # 向路由器注册视图集
urlpatterns += router.urls # 将路由器中的所有路由信息追到django的路由列表中
5.生成migration文件,将数据同步到数据库(不修改数据库配置文件的情况下,默认使用sqlite)
python manage.py makemigrations
python manage.py migrate
此时项目结构如下:
项目目录.png
6.运行项目
python manage.py runserver
在浏览器输入要访问的路由:http://127.0.0.1:8000/bookmark/books/
就可以看到页面,显示的是目前项目中的url列表,直接点击即可访问
访问该路由http://127.0.0.1:8000/bookmark/books/,根据restframework对路由的定义,
该路由返回的是books下面的模型bookinfo的记录列表,页面最下方自动生成可创建新记录的表单,在这里填写表单信息并点击POST提交后,页面将会返回新创建的对象并在表单中自动填充,便于再次修改。
image.png
此时再次访问该列表:http://127.0.0.1:8000/bookmark/books/,我们可以看到刚才新添加的对象被序列化为json返回到页面当中。
我们也可以根据id来访问单个的对象,如下:http://127.0.0.1:8000/bookmark/books/2,页面会返回id为2的对象序列化为json的数据
网友评论