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

Django类视图提交表单触发GET而非POST方法该如何解决?

问题修复方案

根因说明

  • 前端表单提交逻辑错误:你将input的属性错误写在了td标签上,同时嵌套了空href的<a>标签,点击<a>标签默认发送GET请求,不会触发表单的POST提交
  • 后端视图存在语法和逻辑错误:get方法缩进错误不属于ActivationView类,发起POST请求时错误调用了request.post(request是当前请求对象,没有post方法)

修复代码

1. activate.html

<form action="" method="post">
      {% csrf_token %}
      <td>
          <button type="submit">Click Here For Activate Account</button>
      </td>
 </form>

修改说明:移除嵌套的<a>标签,改用标准的submit类型按钮,点击会直接触发表单的POST提交到当前视图路径。

2. views.py

import json
import requests
from django.conf import settings
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View

class ActivationView(View):
    def get(self, request, uid, token):
        print('get called in activate_user')
        return render(request, 'activate.html')
    
    def post(self, request, uid, token):
        print('UID : ', uid)
        print('Token : ', token)
        payload = json.dumps({'uid': uid, 'token': token})
        print("payload : " , payload)
        protocol = 'https://' if request.is_secure() else 'http://'
        web_url = protocol + request.get_host()
        djoser_url = getattr(settings, 'DJOSER.ACTIVATION_URL')
        post_url = web_url + djoser_url
        print('post_url : ' + post_url)
        # 指定json格式请求头适配djoser接口要求
        response = requests.post(post_url, data = payload, headers={"Content-Type": "application/json"})
        return HttpResponse(response.text)

修改说明:

  • 修正get方法缩进,保证属于ActivationView类
  • 导入requests库发起外部POST请求,补充json格式请求头

额外校验项

请确认你的urls.py中对应ActivationView的路由已经配置了<uid>和<token>路径参数,保证两个参数能正常传递到视图的POST方法中。

内容的提问来源于stack exchange,提问作者Shweta Shinde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:27:00