【问题标题】:csrf token not showing input fields - Djangocsrf 令牌不显示输入字段 - Django
【发布时间】:2018-08-26 12:36:16
【问题描述】:

我是 django 的新手。我正在使用django==1.11

我正在尝试创建一个输入用户详细信息的表单。

我的

views.py

from django.shortcuts import render, render_to_response, redirect
from django.template import loader, Template, Context, RequestContext  
from forms import UserForm
from django.http import HttpResponse, HttpResponseRedirect
from django.views.decorators import csrf

def action(request):
    if request.POST:
        form = UserForm(data = request.POST)
        if form.is_valid():
            form.save(commit = False)

            return HTTPResponseRedirect('/rfid/index')
    else:
        form = UserForm()

    args = {}
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('reg.html', args)

forms.py

from django import forms
from models import UserDetails

class UserForm(forms.ModelForm):

    class Meta:
        model = UserDetails
        fields = '__all__'

reg.html

{% extends "rfid/header.html" %}

{% block content %}
<div class="container">
    <form action = "/" method="post">{% csrf_token %}
        <ul>

        {{ form.as_ul }}

        </ul>   

        <input type="submit" name="submit" class="btn btn-default" value="Add User">
    </form>
</div>

{% include "rfid/includes/htmlsnippet.html" %}

{% endblock %}

models.py

from django.db import models

# Create your models here.

class UserDetails(models.Model):
    GENDER_CHOICES = (('M', 'Male'), ('F', 'Female'))
    user_id = models.IntegerField(primary_key = True) 
    name = models.TextField(max_length = 50)
    gender = models.CharField(max_length = 1, choices = GENDER_CHOICES)
    dob = models.DateTimeField()
    address = models.TextField(max_length = 200)
    phone = models.IntegerField()
    email = models.EmailField(max_length=254)
    photo_url = models.CharField(max_length = 200)

    def __str__(self):
        return self.name

但它只显示提交按钮。不显示基于模型的字段。我在这里经历了一些问题,但无法找出问题所在。谁能帮帮我。

希望提供所有必需的详细信息。请问我是否遗漏了什么。

问候。

【问题讨论】:

  • Csrf 令牌是一个隐藏字段。你检查表格吗?
  • 我不确定为什么这与 CSRF 令牌有任何关系。
  • 表单的html是否在页面源代码中呈现?
  • 更改视图的最后一行,return render(request, 'reg.html', {'form':form})

    标签: django forms csrf


    【解决方案1】:

    查看form.save(commit=False) 的行。
    除非您想为该行命名,然后将名称保存为saved_form=form.save(commit=False) 然后saved_form.safe,则不需要commit=False 行。我不知道这是否是问题,但会检查并恢复

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2021-07-14
      • 2014-03-19
      • 2012-04-11
      • 2013-08-11
      • 2016-08-03
      • 2020-09-05
      • 2019-03-20
      • 2012-01-26
      相关资源
      最近更新 更多