csrf令牌不显示输入字段-Django
我是django的新手。am使用的是csrf令牌不显示输入字段-Django,django,forms,csrf,Django,Forms,Csrf,我是django的新手。am使用的是django==1.11 我正在尝试创建一个表单来输入用户的详细信息 我的 视图.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
django==1.11
我正在尝试创建一个表单来输入用户的详细信息
我的
视图.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)
from django import forms
from models import UserDetails
class UserForm(forms.ModelForm):
class Meta:
model = UserDetails
fields = '__all__'
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
forms.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)
from django import forms
from models import UserDetails
class UserForm(forms.ModelForm):
class Meta:
model = UserDetails
fields = '__all__'
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
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 %}
但它只显示提交按钮。不显示基于模型的字段。我在这里问了一些问题,但无法找出问题所在。有人能帮我吗
希望所有要求的细节都给出。请问我是否遗漏了什么
问候。用
表单检查行。保存(commit=False)
除非您希望为该行指定一个名称,然后保存该名称,如
saved\u form=form.save(commit=False)
然后saved\u form.safe
,则不需要commit=False
行。我不知道这是否是问题所在,但将检查并还原Csrf令牌是一个隐藏字段。你检查过表单吗?我不知道为什么这与CSRF令牌有关。表单的html是否在页面源代码中呈现?更改视图中的最后一行,return render(request,'reg.html',{'form':form})