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
相关产品推荐
相关产品推荐

