-
简介
想学习drf,首先熟悉django,因为drf就是django的rest-framework风格,不在赘述
Windows 10 系统,django是3.1.5 djangorestframework是3.12.1,如下Package Version
Django 3.1.5
djangorestframework 3.12.1
PyMySQL 0.10.1 -
创建一个项目:
-
运行并使用浏览器测试:
运行会报错,原因是这个版本的settings文件默认引用了os模块,但是没有导入,在settings.py中添加如下:`import os
顺便将中英文以及时区均修改,如下:
-
创建应用mybook并配置页面(非DRF):
python manage.py startapp mybook
配置文件修改项:
settings.py文件
# 我的应用 'mybook',
mybook应用的配置views.py:
from django.shortcuts import render from django.http.response import HttpResponse # Create your views here. def index(request): return HttpResponse('hello')
mybook路由配置urls.py
from django.contrib import admin from django.urls import path , re_path , include from . import views urlpatterns = [ re_path('^$',views.index) ]
主路由配置urls.py
from django.contrib import admin from django.urls import path , include urlpatterns = [ path('admin/', admin.site.urls), path('',include('mybook.urls')) ]
完成,如下图
以上是最初的django应用基础配置,下面开始配置数据库相关文件 -
配置数据库相关文件
模型models.py文件
from django.db import models # Create your models here. class BookInfo(models.Model): btitle = models.CharField(verbose_name='书名',max_length=20) bpub_date = models.DateField(verbose_name='发布日期',null=True) bread = models.IntegerField(verbose_name='阅读量',default=0) bcomment = models.IntegerField(verbose_name='评论量',default=0) bimage = models.ImageField(verbose_name='图片',upload_to='booktest',null=True) class Meta: # 数据库名称 db_table = 'bookinfo' # 后台显示的模型名称 verbose_name = '图书介绍' verbose_name_plural = verbose_name
项目文件夹下的__init__.py文件:
import pymysql pymysql.version_info = (1 , 4 , 13 , 'final' , 0) pymysql.install_as_MySQLdb()
settings.py文件:
# mysql数据库连接相关信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'book', 'PORT': 3306, 'HOST': 'localhost', 'USER': 'root', 'PASSWORD': 'root' } }
数据库迁移自己写吧,以下两条命令:
#数据库迁移,即将模型迁移为MySQL可识别的语句,生成类似0001_initial.py文件 python manage.py makemigrations #数据库同步,将模型与数据库中表对应(同步的是表结构,而非数据库的数据 python mange.py migrate
数据库中的数据请自定义。
直接使用django将数据库中的内容显示到页面上:
views.py文件配置:from django.shortcuts import render from django.http.response import HttpResponse from .models import BookInfo # Create your views here. def index(request): bookinfo = BookInfo.objects.all() strbook = '' for i in bookinfo: strbook += str(i.bpub_date) + i.btitle + '\n' return HttpResponse(strbook)
页面效果:
-
使用DRF的Response返回页面效果
配置views.pyfrom django.shortcuts import render from rest_framework.views import APIView from .models import BookInfo from rest_framework.response import Response # Create your views here. # 书籍列表 class BookList(APIView): def get(self , request): bookinfo = BookInfo.objects.all() d = dict() for i,j in enumerate(bookinfo): d[i] = j.btitle # return Response(d) return Response(d)
settings.py文件:
添加appINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 我的应用 'mybook', # django restframwork本质就是一个应用,默认需要添加到app中 'rest_framework' ]
应用路由配置mybook.urls.py:
from django.urls import path , re_path , include from .views import BookList urlpatterns = [ re_path('^$',BookList.as_view()) ]
浏览器测试:
如果想展示更多的信息,那么就需要将更多的字段添加到视图函数中,接下来就看看serializers文件吧,这也是django和drf的本质区别,这是drf提供的序列化器,非常好用的一个序列化工具。
从以上的对比中,可以看出:django的httpresponse返回的是字符串,而drf的Response返回的是字典
接下来我们使用serializers进行序列化,看看他有多简便吧! -
序列化器:serializers
在应用目录下创建serializers.py文件,内容如下:
from rest_framework import serializers from .models import BookInfo class BookInfoSerializer(serializers.ModelSerializer): """bookinfo的序列化器""" class Meta: # 序列化的模型 model = BookInfo # 序列化的字段 fields = "__all__"
修改视图函数,如下:
from rest_framework.views import APIView from rest_framework.response import Response from .models import BookInfo from .serializers import BookInfoSerializer # Create your views here. # 书籍列表 class BookList(APIView): def get(self , request): bookinfo = BookInfo.objects.all() bookinfo_list = BookInfoSerializer(instance=bookinfo, many=True) return Response(bookinfo_list.data)
浏览器测试,如下:
结束,由于时间匆忙,整体思路并不紧凑,以后有时间在进行修改吧!
Django Rest Framework 入门项目创建
最新推荐文章于 2024-07-23 12:51:38 发布