Django 从入门到放弃:请求与表单
Request
Django 框架在收到 web 客户端请求的时候,会先判断请求的 url,通过 urls.py 路由文件把该 url 映射到视图函数,然后执行视图函数的一系列操作,返回给客户端一个 response。在前文中也已经定义过一些很简单的视图函数,容易发现它们都必须携带一个参数 request(当然你可以任意起名,叫 request 只是因为传入的对象是一个 WSGIRequest)。
这个 request 变量自带了一堆属性,例如 method、GET、POST、user、session 等。
其中通过 request.method 可以判断请求的方法,当请求方法为 GET 时,request.GET 会返回一个 QueryDict 对象(和字典类似),其包含了该次请求的所有 GET 参数;POST 方法同理。
request.user 可以获得一个 User 对象,为当前登录的用户,以后讲到登录功能时再提。
Form
表单通常用于发起 POST 请求(当然也可以 GET),以下举一个 django 框架中表单的例子。
首先,在 templates 文件夹下放一个 form.html,写入一个简单的登录表单:
<!DOCTYPE html>
<html>
<head>
<title>form</title>
</head>
<body>
<form action="#" method="POST">
<input type="text" name="username" required>
<input type="password" name="password" required>
<input type="submit">
</form>
</body>
<!-- 用于接收后端发来的message -->
{% if messages %}
{% for message in messages %}
<script>alert('{{ message }}');</script>
{% endfor %}
{% endif %}
</html>helloworld 文件夹下的 urls.py 中在 urlpatterns 列表添加一项:
path('login/', views.mylogin),views.py 添加导入与函数:
from django.contrib import messages
def mylogin(request):
if request.method == 'GET':
return render(request, 'form.html')
# 键取的是html中表单组件的name
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'admin' and password == 'adminpwd':
messages.success(request, '登录成功!')
else:
messages.warning(request, '用户名或密码错误!')
return render(request, 'form.html')然后我们将项目运行在本地 80 端口,并访问 http://127.0.0.1/login/,可以看到一个充满了简约风的表单页面,填入 admin 和 adminpwd 并提交即可。
提交以后网页显示
Forbidden (403)
CSRF verification failed. Request aborted.
...这是说表单在提交时缺少 CSRFtoken,是 django 默认带有的一种保护机制(正所谓防君子不防小人系列)。
解决这个问题有两种方法:
- 找到 settings.py 文件大约第 42 行,
MIDDLEWARE参数中将第四项django.middleware.csrf.CsrfViewMiddleware注释掉。 - 在 html 表单里面添加
{% csrf_token %}
这样就可以正常将提交到后端进行处理了。



















































































































































































































































































































































































































































.png)
.jpg)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.png)
.jpg)
.jpg)
.gif)
.jpg)
.jpg)
.jpg)
.gif)
.gif)
.gif)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.gif)
.gif)
.gif)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.gif)
.jpg)
.jpg)
.gif)
.jpg)
.jpg)
.gif)
.gif)
.jpg)
.png)
.jpg)
.jpg)
.gif)











































































































