Django:从HTML取表单数据用于POST请求及GET返回None解惑
通俗讲解:Django里怎么拿POST表单的账号密码
先搞懂GET和POST的区别(用寄快递类比)
- GET:就像把快递单信息写在快递盒子外面,所有人都能看见,数据跟着地址栏的链接一起传,适合搜商品、翻页这种不需要保密的请求。
- POST:就像把快递单信息塞进盒子里封严实,别人看不到,数据藏在请求的“肚子”里,适合传密码、银行卡号这种敏感内容。
为什么你之前的代码返回None?
你写的response.GET.get['username']犯了两个错:
- 搞反了对象:Django里是用
request(请求对象)拿数据,不是response(响应对象)。 - 找错了地方:你用POST发的请求,数据在POST的“盒子”里,却跑去GET的“盒子外面”找,当然啥也找不到,返回None。
- 语法错了:
get是个方法,要用括号()调用,不是方括号[]。
正确操作步骤(对应Stack Overflow的答案逻辑)
第一步:确保HTML表单是POST模式
你的表单必须明确写method="POST",还要加安全验证标签{% csrf_token %}(相当于快递的防伪码,防止别人乱发假请求),同时输入框要设置name属性——这个name就像快递单上的“收件人姓名”,Django靠它找对应的数据。
示例HTML代码:
<form method="POST"> {% csrf_token %} <input type="text" name="username" placeholder="输入用户名"> <input type="password" name="password" placeholder="输入密码"> <button type="submit">提交</button> </form>
第二步:在视图里正确拿POST数据
先判断请求方法是POST,再从request.POST里用get()方法取数据。用get()比直接用方括号[]更安全——如果用户没填某个字段,get()会返回None,不会直接报错。
示例视图代码:
def login_view(request): if request.method == 'POST': # 从POST的“密封盒子”里拿数据 username = request.POST.get('username') password = request.POST.get('password') # 接下来就可以用这两个变量做登录验证之类的操作了 print(f"拿到的用户名:{username},密码:{password}") return render(request, 'login.html')
内容的提问来源于stack exchange,提问作者Michael Long
相关产品推荐
相关产品推荐

