项目地址:https://github.com/qq20004604/Python3_Django_Demo
如果有用,麻烦给一个star
应用名为:getform
python manage.py startapp getform
编辑 urls.py,先引入:
from getform import views as form_views
然后再配置路由(添加到 urlpatterns)中:
# 这个是html
path('form/', form_views.index),
# 这个是处理post提交
path('form/submit', form_views.submit),
编辑 getform/viesw.py,内容为:
from django.shortcuts import render, HttpResponse
# Create your views here.
def index(request):
return render(request, 'form.html')
def submit(request):
# 判断是 post 请求,注意,这里应是大写
if request.method == 'POST':
# 暂时留空
pass
return HttpResponse('开发中')
在 templates 文件夹里添加 form.html,内容如下:
表单
此时查看页面:http://localhost:8000/form/
,正常。
直接点击提交,进入报错页面,提示内容如下:
Forbidden (403)
CSRF verification failed. Request aborted.
所谓 CSRF,参考:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
在form 标签内加入 {% csrf_token %}
,如下:(注意,一定要加到form标签内)
效果是form标签内插入了如下标签(示例,value值是随机的):
此时再次点击提交按钮,会返回开发中
三个字符串。
重写结果如下:
def submit(request):
print(request.method)
# 判断是 post 请求,注意要是大写
if request.method == 'POST':
# 拿取数据,如果请求方式是 GET 的话,下面应该写为:request.GET.get('user')
username = request.POST.get('user')
age = request.POST.get('age')
# 这个是为了测试没有取到数据的值,测试结果:值为 None
test = request.POST.get('test')
print(username, age, test)
# 返回给用户
return HttpResponse('你输入的用户姓名是:%s, 年龄是:%s, test 是%s' % (username, age, test))
else:
return HttpResponse('没有拿取到数据噢')
重新提交,姓名为1,年龄为2,最后跳转到 http://localhost:8000/form/submit
,显示内容为:
你输入的用户姓名是:1, 年龄是:2, test 是None
以上情况是 form 表单的处理方式。我们常见的请求以JSON形式比较多,那么需要换个方式来处理。
核心步骤如下:
重写 templates/form.html 文件,如下:
表单
返回信息:空
做了几件事:
编辑 urls.py ,插入一条路由:
# 处理json提交
path('form/json', form_views.postjson),
编辑 getform/views.py 文件,插入一个新函数:
def postjson(request):
# time.sleep(10)
if request.method == 'POST':
# 拿取数据:json发送post时,数据是在body里
# 要转为 utf8 格式编码
# print('request.body: ', request.body)
data = json.loads(request.body)
# 此时 data 是一个 dict
# print('data: ', data)
res = '你提交的内容是【%s】' % data['content']
# print('res: ', res)
result = {
'res': res
}
return HttpResponse(json.dumps(result), content_type="application/json")
else:
return HttpResponse('请求类型错误')
逻辑参照注释说明。
刷新页面,打开浏览器控制台,点击新增的按钮,查看ajax的发送信息和返回信息。
一切如预期运行。