web开发模式;API接口;POSTMAN的使用;Restful规范;序列化;drf介绍与安装 # day65

1 Web开发模式(**)

# 前后端混合开发模式
# 前后端分离

 

2 API接口(**)

#api接口:前后台信息交互的媒介
#类似于这种:https://api.weibo.com/2/statuses/show.json

 

3 POSTMAN的使用(

# 接口测试工具
# 安装:无脑双击
# post请求携带的请求体,编码格式有几种
-urlencoded
  -默认请情况
       -在请求体中是: name=egon&age=18----》request.POST
   -formdata
  -上传文件
       -既可以传文件,又可以带数据
       -在请求体中是:
      数据部分
      name=egon&age=18    ----》request.POST
           文件部分
           ---asdfasdfasdfasdf-------
           文件的二进制         ----》request.FILES
   -json
  -json格式直接放在请求体中
       -在请求体中的格式
      {"name":"lqz","age":19}---》request.POST取不到值
       -为什么取不到?
      -因为作者没有写,作者只写了urlencoded和formdata的编码
           -json格式需要自己处理

1630292405340

4 Restful规范(*****

#规范:我们可以不按照(公司自己的规范,基本上都大差不差)
# REST全称是Representational State Transfer,表征性状态转移,2000年Roy Fielding的博士论文中

# RESTful是一种定义 API接口的设计风格,尤其适用于前后端分离的应用模式中
# 10条
-1 保证数据安全,通常使用https进行交互(https比http安全,http+ssl=https)
   -2 接口中带,api关键字标,识接口api接口
  https://api.baidu.com
https://127.0.0.1/api/books
           
  -3 url链接中带接口版本号
https://api.baidu.com/v1
https://api.baidu.com/v2
           
  -4 数据即是资源,均使用名词(可复数)(地址中不带操作资源的动词)
https://api.baidu.com/v1/books
  -5 资源操作由请求方式决定
-获取数据  get
  -新增数据  post
       -删除数据  delete
       -修改数据  put/patch
       
 -6 在url中带搜索,过滤,排序条件
https://api.example.com/v1/zoos?limit=10
 -7 响应中带状态码
-http响应,就有状态码
  -2xx
      -3xx
           -4xx
           -5xx
       -200, 请求成功,服务器已成功处理了请求
       -301, 请求的网页已永久移动到新位置,该网页数据永远也看不到,没有了
       -302, 临时重定向别的位置,后面还会使用
       -403, 服务端没有权限
       -404, 请求地址不存在
       -500 服务器内部错误
       -返回的json格式中也带状态码
      -公司自己定制的
          {code:1000}
           
-8 响应的json格式中带错误信息
{code:1000,msg:成功}
   
-9 针对不同操作,服务器向用户返回的结果应该符合以下规范
   GET /books:返回资源对象的列表(数组)
   GET /books/1:返回单个资源对象
   POST /books:返回新生成的资源对象
   PUT /books/2:返回完整的资源对象 (完全修改)
   PATCH /books/2:返回完整的资源对象(局部修改)
   DELETE /books/1:返回一个空文档
-10 响应中带链接

 

5 序列化(**)


# 数据转换格式
序列化: 把我们识别的数据转换成指定的格式提供给别人
反序列化:把别人提供的数据转换/还原成我们需要的格式。

 

6 drf介绍和安装(**)

# djangorestframework:drf,它是django的一个第三方app
# 使用它可以快速的写出符合restful规范的接口
# pip3 install djangorestframework
# 最新版本不支持django 1.x ,支持django 2.x
# 以后都用django2.2.2

 

 

 

 

作业



#1 写一个装饰器,加在视图函数上,无论前端是哪个格式编码,post请求提交的数据,都从request.data中取
# 2 定义一个book表,实现5个接口(使用原生django写出来)
127.0.0.1/books   get  获取所有图书
127.0.0.1/books/1  get 获取id为1的图书
127.0.0.1/books   post   新增一本图书
   127.0.0.1/books/1  delete 删除id为1的图书
   127.0.0.1/books/1  put  修改id为1的图书


# 写一个类,用起来跟字典一样,但是要有   对象.getlist
-继承dict
   -重写 __getattr__ ,点拦截

 

 

view.py

from django.shortcuts import render, HttpResponse
from django.http import JsonResponse
from django.http.request import QueryDict
from app01 import models

# Create your views here.

import json

def books(request, *args, **kwargs):
   pk = kwargs['pk']
print(pk)
if request.method == 'GET':
book_id = pk
if pk:
book_list = models.Book.objects.filter(pk=book_id)
print('查看所有大成功')
else:
book_list = models.Book.objects.all().values_list()
print('查看1本书大成功')
return HttpResponse(book_list)

if request.method == 'POST':
name = request.POST.get('name')
price = request.POST.get('price')
models.Book.objects.create(name=name, price=price)
print('增加书大成功')
return JsonResponse({'code': 200, 'msg': 'success'}, safe=False)

if request.method == 'DELETE':
book_id = pk
models.Book.objects.filter(pk=book_id).delete()
print('删除书大成功')
return JsonResponse({'code': 200, 'msg': 'success'}, safe=False)

if request.method == 'PUT':
book_id = pk
put = QueryDict(request.body)
# put_str = list(put.items())[0][0] # 将获取的QueryDict对象转换为str 类型
# put_dict = eval(put_str) # 将str类型转换为字典类型
name = put.get('name')
print(name)
price = put.get('price')
models.Book.objects.filter(pk=book_id).update(name=name, price=price)
print('修改书大成功')
return JsonResponse({'code': 200, 'msg': 'success'}, safe=False)

url.py


"""drf_01 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
url(r'^admin/', admin.site.urls),
# url(r'^index/', views.index),

# url(r'^(?P<book>\w+)/(?P<pk>\d+>)', views.index),
url(r'^books/$', views.books), # 获取所有图书 get请求 如果是post请求 就是增加
# 获取id = \d+的图书
url(r'^books/(?P<pk>\d+)/$', views.books),
]



posted @ 2021-08-30 22:03  Gnomeshghy  阅读(242)  评论(0)    收藏  举报