美文网首页
使用DjangoRESTframework进行项目开发

使用DjangoRESTframework进行项目开发

作者: 一杯海风_3163 | 来源:发表于2019-10-18 13:22 被阅读0次

主要应用技术点:
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列表,直接点击即可访问

image.png
访问该路由http://127.0.0.1:8000/bookmark/books/,根据restframework对路由的定义,
该路由返回的是books下面的模型bookinfo的记录列表,页面最下方自动生成可创建新记录的表单,在这里填写表单信息并点击POST提交后,页面将会返回新创建的对象并在表单中自动填充,便于再次修改。
image.png

此时再次访问该列表:http://127.0.0.1:8000/bookmark/books/,我们可以看到刚才新添加的对象被序列化为json返回到页面当中。

image.png

我们也可以根据id来访问单个的对象,如下:http://127.0.0.1:8000/bookmark/books/2,页面会返回id为2的对象序列化为json的数据

image.png

相关文章

网友评论

      本文标题:使用DjangoRESTframework进行项目开发

      本文链接:https://www.haomeiwen.com/subject/wadimctx.html