Web开发模式
1 前后端混合开发模式---》老项目
2 前后端分离开发模式---》新项目
API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本
api接口:
通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
-https://www.xxxx.com/books/--->json 格式数据---》接口
-https://www.xxxxxx.com/xxxxxxx/articles/xxxxxxx.html---》返回界面
url和接口的区别:
Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
1 url:长得像返回数据的url链接
https://api.map.baidu.com/place/v2/search
2 请求方式:get、post、put、patch、delete
采用get方式请求上方接口
3 请求参数:json或xml格式的key-value类型数据
ak:6E823f587c95f0148c19993539b99295
region:上海
query:肯德基
output:json
4 响应结果:json或xml格式的数据
-https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
典型的api接口长这样
-url地址
-有请求方式
-携带参数
-返回格式是json,xml
需要进行反序列化。
总结
1 前端不同编码格式
urlencoded: body体中 :username=lqz&password=123 django 的request.POST取出值
json: body体中 :{"username":"lqz","password":"123"} django 的request.POST取不出值
request.body 能取出值。
form-data:body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从request.FILES
2 mysql中varchar和char的区别:
char(定长) :超过直接报错,不够则用字符补全
vachar(可变长): 超过直接报错,不够则有几个存几个
大多数情况下使用varchar,如果存储数据都是固定长度,用char
3 不用pycharm创建django项目的命令
django-admin startproject 项目名
(django-admin startproject app01)
4 django中的文件对象和原来的文件对象
-django:from django.core.files.uploadedfile import InMemoryUploadedFile
-原生文件:_io.BufferedWriter
-django中文件类没有继承原生文件类,但是有原生文件类所有方法
装饰器模板
def warpper_request(func):
def inner( *args, **kwargs):
# 在执行被装饰函数前执行
res = func(*args, **kwargs)
# 在执行被装饰函数后执行
return res
return inner
写一个装饰器,无论前端发过来什么格式的数据,都可以取出来,并转为字典格式。
# 只用来装饰视图函数,request必传
def warpper_request(func):
def inner(request, *args, **kwargs):
# 在执行被装饰函数前执行
# 1 如果POST中有值,直接赋值给request.data ---> urlencoded,form-data
# 2 如果没有值:就是json格式,直接把body 序列化,给data即可
try:
request.data = json.loads(request.body)
except:
request.data = request.POST
res = func(request, *args, **kwargs)
# 在执行被装饰函数后执行
return res
return inner
上面装饰器的用法
@warpper_request
def login1(request):
username = request.data.get('username')
password = request.data.get('password')
print(username)
user = User.objects.filter(username=username, password=password).first()
if user:
return JsonResponse({'code': 100, 'msg': '登录成功'})
else:
return JsonResponse({'code': 101, 'msg': '用户名或密码错误'})