来自 Django 点击劫持中间件的错误:表单没有属性 'get'

Error from Django clickjacking middleware: Form has no attribute 'get'

我有一个包含 3 个字段的表单:

class AjoutBanque(forms.Form):
    nom=forms.CharField()
    agence=forms.CharField()
    rib=forms.IntegerField()

我的看法:

def AjoutBanq(request):
    if request.user.is_active :
        form2=AjoutBanque(request.POST)
        if form2.is_valid():
            print("valid")
            clt= banque(nom=form2.cleaned_data.get('nom'),agence=form2.cleaned_data.get('agence'),rib=form2.cleaned_data.get('rib'))
            clt.save()
    return redirect('/banque/')

提交我的表单时出现错误:

'AjoutBanque' object has no attribute 'get'

这是回溯:

 Traceback:
   File "C:\Users\users MGE\AppData\Local\Programs\Python\Python36-32\lib\site- 
     packages\django\core\handlers\base.py" in get_response
  131.                 response = middleware_method(request, response)

   File "C:\Users\users MGE\AppData\Local\Programs\Python\Python36- 
  32\lib\site-packages\django\middleware\clickjacking.py" in process_response
   32.         if response.get('X-Frame-Options') is not None:

       Exception Type: AttributeError at /addbanque
      Exception Value: 'AjoutBanque' object has no attribute 'get'

我的网址:

url(r'^banque',views.BanqueViews.as_view(), name='banque'), //url that contains the form
url(r'addbanque$',views.AjoutBanque, name='banqueajout')//url of submit button of the form.

我不知道这个错误是从哪里来的,你知道吗?

此代码应该有效: 从 django.http 导入 HttpResponse

def AjoutBanq(request):
    if request.user.is_active :
        form2=AjoutBanque(request.POST)
        if form2.is_valid():
            print("valid")
            clt= banque(nom=form2.cleaned_data.get('nom'),agence=form2.cleaned_data.get('agence'),rib=form2.cleaned_data.get('rib'))
            clt.save()
            return redirect('/banque/')
    return HttpResponse('')

你必须在你的视图中 return HttpResponse,否则 django 中间件(在这种情况下 django.middleware.clickjacking.XFrameOptionsMiddleware 会抛出错误。

您的观点是 AjoutBanq,您的表格是 AjoutBanque。在您的网址中,您使用的是表单而不是视图。应该是:

url(r'addbanque$',views.AjoutBanq, name='banqueajout')//url of submit button of the form.

我建议您将表单重命名为 AjoutBanqueForm 以减少混淆的可能性。