HTTP请求
HTTP常见的请求方式有哪些:
get,post,put,delete,options
django-如何接收VUE发送的HTTP请求:
vue---http请求----通过uwsgi----转化为wsgi-----django接收到wsgi
django将wsgi请求-----Uwsgi-------转化为http请求----vue接收请求
为什么使用http请求:
协议规定了客户端和服务器之间的数据传输格式.
http是如何遵循TCP协议的:
三次握手,四次挥手
三次握手:
客户端发送请求给服务器
服务器接收到请求
客户端发送正式连接请求
四次挥手:
客户端发送离开请求
服务器接收到离开请求
服务器发送离开请求
客户端同意离开请求
http的构成:
请求行---请求头---请求体
请求行:由请求方式,请求路径,HTTP协议及其版本
请求头:是HTTP的报文头,报文头包括若干个属性,格式为:“属性名:属性值”,服务端据此获取客户端的信息
请求体:是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
HTTP请求常见的状态码有哪些:
200:请求成功
400:客户端请求有误
301:永久重定向
302:暂时重定向 ↵
400:客户端有误
404:路由地址不存在
500:服务器发生不可预期的错误
wsgi进入中间件后通过什么,怎么走出去?
request请求=>中间件1=>中间件2=>中间件3=>视图,model,url=>中间件3=>中间件2=>中间件1=>response响应内容
中间件:
常用的中间件有哪些?
process_request:
1.中间件的process_request方法是在执行视图函数之前执行的
2.当配置中间件时,会按照MIDDLEWARE的注册顺序,也就是列表的索引值,从前到后依次执行的。
3.不同中间件之间传递的request都是同一个对象。
process_response:
process_response是在视图函数执行之后开始的
process_exception:
处理异常时调用
process_template_response:
在结束视图之后立即调用
process_view:
处理试图前调用
路由正则匹配获取参数:
re_path('路由地址(正则表达式)'),?P<q>用来给获取路由参数的变量定义一个固定的名字
例:
Index1/re=五位数的小写字母/
re_path('index1/(?P<s>[a-z]{5})/$',Text1.as_view()),
view视图:
class Text1(View):
def get(self,request,s=None):
print(s)
return HttpResponse(s)
什么是MVC,MVT?
。分工,解耦,让不同的代码降低耦合,增强代码的可扩展性贺可移至性
MVC:
M全拼model,主要伟了封装对数据库的访问,对数据库进行增,删,改,查 ↵
v全拼伟view,主要是用于封装结果,生成页面展示html内容
c全拼伟controller,用于接收请求,处理业务逻辑,与model和view交互,返回结果
MVT:
M全拼model,与MVC中的M功能相同,负责和数据库交互,进行数据处理
V全拼为view,与MVC中的C功能相同,接收请求,处理业务逻辑,返回应答
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html
JsonResponse 和HttpResponse 有什么区别?
Json返回的是Json格式的字典,
Httpresponse返回的则是一串字符串,
loads是将json数据转化为python数据
dumps是将python数据转化为json数据
def get(self,request):
user = UserModel.objects.all()
#user返回的是一个查询集,
l=[]
for i in user: #循环查询集,讲查询集内的数据循环获取到l这个列表内
l.append({
'id':i.id,
'username':i.username,
'password':i.password
})
str_user = json.dumps(l) #将l这个列表转化成字符串
return HttpResponse(str_user) #返回这个字符串
manage.py下创建app如何创建?
指令python manage.py startapp app名
如果说需要将app拖入到一个app汇总的这样的一个目录时
需要在setting中配置:
sys.path.insert(0,os.path.join(BASE_DIR,'app'))
并且需要将app汇总的这个目录设置为源码根
注意:在序列化器内或者是视图函数,路由等文件,不能直接调用app汇总目录里的这个app的model,视图或函数,
导包时必须要:app.app01(app是汇总目录名,app是app名称)