文章目录
一、HttpRequest对象
HttpRequest对象:
服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API
get_post\views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
print(request) #<WSGIRequest: GET '/get_post/index/'>
print(request.path) #/get_post/index/
print(request.method) #GET
print(request.encoding) #None
return HttpResponse('访问成功')
二、GET和POST请求
1.form标签中的GET和POST
在HTML中,form表单的作用是收集标签中的内容,… 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。
一个表单必须指定两样东西:
- form的method参数用于设置表单的提交方式,默认使用POST.
- action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL.
form表单使用get方式提交的例子
get_post.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="get" action="{% url 'get_test' %}">{% csrf_token %}
用户名: <input type="text" placeholder="请输入用户名" name="user"><br>
密 码:<input type="text" placeholder="请输入密码" name="pwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
ger_post\views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
print(request) #<WSGIRequest: GET '/get_post/index/'>
print(request.path) #/get_post/index/
print(request.method) #GET
print(request.encoding) #None
return render(request, 'get_post/get_post.html')
def get_test(request):
print(request.method)
username = request.GET.get('user')
password = request.GET.get('pwd')
print(username)
print(password)
return HttpResponse('操作完毕')
form表单使用post方式提交的例子
get_post.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="{% url 'post_test' %}">{% csrf_token %}
用户名: <input type="text" placeholder="请输入用户名" name="user"><br>
密 码:<input type="text" placeholder="请输入密码" name="pwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
ger_post\views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
print(request) #<WSGIRequest: GET '/get_post/index/'>
print(request.path) #/get_post/index/
print(request.method) #GET
print(request.encoding) #None
return render(request, 'get_post/get_post.html')
def post_test(request):
print(request.method)
username = request.POST.get('user')
password = request.POST.get('pwd')
print(username)
print(password)
return HttpResponse('操作完毕')
一键多值的getlist方法
2.GET和POST对比
三、类视图
View类视图以请求方式为类方法.
在对应的方式下面编写对应的逻辑函数.
四、文件上传
Django在处理文件上传的时候,文件数据被保存在了request.FILES
FILES中的每个键为中的name
设置文件的存储路径
1.在项目根目录下static中创建media文件夹
2.图片上传后,会被保存到“/static/media/文件”
3.打开settings.py文件,增加media_root项
文件上传form表单中
FILES只有在请求的方法为POST 且提交的带有enctype="multipart/form-data"
的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象
文件上传视图函数
五、HttpResponse对象
六、登录状态保持
服务器中设置cookie及获取cookie
注意:设置cookie值以及删除cookie值都是response对象的操作,而获取cookie是从requeset相应中获得的.
get_post\views.py
import datetime
def set_ck(request):
response = HttpResponse('设置cookie')
#response.set_cookie('name', 'moran') # 默认关闭过期时间
#response.set_cookie('name', 'moran', max_age=20) # 设置20秒过期
response.set_cookie('name', 'moran', expires=datetime.datetime(2021, 9, 2)) # 设置20秒过期
return response
def get_ck(request):
cookie = request.COOKIES
ck = cookie.get('name')
return HttpResponse('欢迎{}进入'.format(ck))
def del_ck(request):
response = HttpResponse('删除cookie')
response.delete_cookie('name')
return response