You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django:从HTML取表单数据用于POST请求及GET返回None解惑

通俗讲解:Django里怎么拿POST表单的账号密码

先搞懂GET和POST的区别(用寄快递类比)

  • GET:就像把快递单信息写在快递盒子外面,所有人都能看见,数据跟着地址栏的链接一起传,适合搜商品、翻页这种不需要保密的请求。
  • POST:就像把快递单信息塞进盒子里封严实,别人看不到,数据藏在请求的“肚子”里,适合传密码、银行卡号这种敏感内容。

为什么你之前的代码返回None?

你写的response.GET.get['username']犯了两个错:

  1. 搞反了对象:Django里是用request(请求对象)拿数据,不是response(响应对象)。
  2. 找错了地方:你用POST发的请求,数据在POST的“盒子”里,却跑去GET的“盒子外面”找,当然啥也找不到,返回None。
  3. 语法错了: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:01:21