模板网站建设流程网页设计模板免费下载田田田田田田田田田田
文章目录
- 项目地址
 - 一、django环境安装以及初识restful
 - 1.1 安装python 3.10的虚拟环境
 - 1.2 创建django工程文件
 - 1.3 创建一个book app
 - 1.4 序列化(Django JsonResponse)
 - 1.4.1创建一个Models
 - 1.4.2 创建django的超级用户admin
 - 1.4.3 添加serializers.py生成序列化器
 
- 1.5 FBV创建视图
 - 1.5.1 在app里创建django 视图
 - 1.5.2创建app的urls路由
 - 1.5.3 将app的路由注册到项目的路由
 - 1.5.4 整体流程梳理
 - 1.5.5 创建一个可以通过传递id来get/post
 - 1.5.6 使用restful风格改写views
 
- 1.6 CBV
 - 1.6.1 使用restful的APIView类来创建
 
- 二、Django restful组件研究
 - 2.1 APIView的主要作用
 - 2.1 序列化器serializer
 - 2.1.1 创建一个Book模型类
 - 2.1.2 设计book类的序列化器
 - 2.1.3 设计view,get/post请求
 - 2.1.4 将视图view添加到project路由里
 - 2.1.5 项目结构
 - 2.1.6 对单个对象进行操作
 
- 2.2 使用ModelSerializer
 - 2.3 GenericAPIView 实现增删改查
 - 2.4.1 创建多个Models
 
项目地址
第一章:
- 教程作者:Codingstrade
 - 教程地址:
 
https://www.CSDN.com/watch?v=z6WudaByH1k&t=120s
 
- 代码仓库地址:
 
 
- 所用到的框架和插件:
 
django
djangorestfui
 
- 插件
 
django 
thunder client
sqlite view
 
第二章:
 课程i地址:
https://www.bilibili.com/video/BV1z5411D7BQ?spm_id_from=333.788.videopod.episodes&vd_source=791e6deaa9c8a56b1f845a0bc1431b71&p=17
 
一、django环境安装以及初识restful
1.1 安装python 3.10的虚拟环境
- pipenv 安装指定版本的python
 
pipenv --python 3.10
 
- 另外一种方法
 
python3.10 -m venv venv
 
- 运行虚拟环境
 
pipenv shell
 
- 另一种方法
 
.\venv\Scripts\activate
 

- 安装django
 
pipenv install django
 
- 安装所有的包
requirements.txt 
django>=4.0.0,<4.1.0
djangorestframework
pyyaml
requests
django-cors-headers
 
- 安装
 
pip install -r requirements.txt
 
1.2 创建django工程文件
- 创建项目
myapi是项目的名称 
django-admin startproject myapi
 
-  
查看文件

 -  
运行django,默认l
ocalhost:8000 
py manage.py runserver 
 

1.3 创建一个book app
- 控制台输入
 
py manage.py startapp book 
 
-  
成功后,文件夹目录

 -  
注册APP到django里

 
1.4 序列化(Django JsonResponse)
将数据库内容 转为python的格式
1.4.1创建一个Models
- 在
api/models.py里创建 
from django.db import models# Create your models here.
class Post(models.Model):title = models.CharField(max_length=120)author = models.CharField(max_length=120)email = models.EmailField( default='')
 
- 注册Models
 
python manage.py makemigrations
 
- 创建models表
 
python manage.py miggrate
 
res_api/admin.py注册我们的Models
admin.site.register(Post)
 
1.4.2 创建django的超级用户admin
- 创建超级用户
 
python manage.py createsuperuser
 
- 创建完成之后登录到
 
http://127.0.0.1:8000/admin/
 

- 成功之后在post里添加一个用户,用于我们将来的测试
 
1.4.3 添加serializers.py生成序列化器
- 在
serializers.py文件里添加 
from rest_framework import serializers
from .models import Post    class PostSerializer(serializers.ModelSerializer):class Meta:model = Postfields = ['title', 'author', 'email']
 
1.5 FBV创建视图
- 该模式下,不管是django原生,还是restful风格,都是函数式编程
 
1.5.1 在app里创建django 视图
- 创建
res_api/views.py 
from django.shortcuts import render
from .models import Post
from .serializers import PostSerializer
from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from django.views.decorators.csrf import csrf_exempt #测试postman使用# Create your views here.
@csrf_exempt
def PostsView(request):if request.method == 'GET':posts = Post.objects.all()serializer = PostSerializer(posts, many=True)return JsonResponse(serializer.data, safe=False)elif request.method == 'POST':post_data = JSONParser().parse(request)serializer = PostSerializer(data=post_data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data, status=201)return JsonResponse(serializer.errors, status=400)
 
1.5.2创建app的urls路由
1.创建res_api/urls.py:注意,这里的只是app的路由 ,并不是项目的路由,
from django.urls import path
from .views import PostsViewurlpatterns = [path('posts/', PostsView),
]
 
1.5.3 将app的路由注册到项目的路由
1.drf/urls.py里添加
from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('', include('res_api.urls')),
]
 
1.5.4 整体流程梳理
- 在app里创建models,这个models一般对应的数据库里的数据
res_api/models.py,使得python可以从数据库里取数 - 创建完之后,将models在app的admin下面注册
res_api/admin.py,让django知道这个models模型 - 序列化Models,
res_api/serializers.py,这里一般就是对表中的字段进行序列化 - 序列化完整之后需要构建view,
res_api/views.py,这里的功能是告诉django如何取到models序列化好的数据,怎么取,以什么方式来取 - 注册app自己的路由
res_api/views.py,告诉django 该app的models通过什么字段能访问 - 将app的路由注册到project里,这样浏览器就可以通过项目的地址+app里定义的字段访问到我们的models数据
 
- 至此,有个bug就是post的提交方式是和get一样,我们需要将他改为posts的方式
 
1.5.5 创建一个可以通过传递id来get/post
rest_aip/views.py添加一个新的函数,用来处理传递的id
@csrf_exempt    
def postuser_by_id(request, pk):try:post = PostUsers.objects.get(pk=pk)except PostUsers.DoesNotExist:return HttpResponse(status=404)if request.method == 'GET':serializer = PostSerializer(post)return JsonResponse(serializer.data)elif request.method == 'PUT':post_data = JSONParser().parse(request)serializer = PostSerializer(post, data=post_data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data)return JsonResponse(serializer.errors, status=400)elif request.method == 'DELETE':post.delete()return HttpResponse(status=204)
 
- 将我们的函数,注册到我们的app的urls里,
res_api/urls.py 
urlpatterns = [path('postusers/', PostUsersView), path('detials/<int:pk>', postuser_by_id),  # using <int:pk> to get the id of the post
]
 
- 测试,成功
 
1.5.6 使用restful风格改写views
- 修改
res_api/views.py 
from django.shortcuts import render
from .models import PostUsers
from .serializers import PostSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status@api_view(['GET', 'POST'])
def PostUsersView(request):if request.method == 'GET':posts = PostUsers.objects.all() #quertSetserializer = PostSerializer(posts, many=True)return Response(serializer.data)elif request.method == 'POST':serializer = PostSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)@api_view(['GET', 'PUT', 'DELETE'])
def postuser_by_id(request,