Python 如何在不使用自动模型表单的情况下从Django中的文本框中获取数据?
我有一件非常简单的事情想做,但由于某种原因,我还没有找到解决办法。 我有一个HTML格式的表单Python 如何在不使用自动模型表单的情况下从Django中的文本框中获取数据?,python,database,django,forms,model,Python,Database,Django,Forms,Model,我有一件非常简单的事情想做,但由于某种原因,我还没有找到解决办法。 我有一个HTML格式的表单 <form id="user_form" method="POST" action="/ProjectName/home/"> {% csrf_token %} <div class="registerLabel"> Full name: </div> <div class="registerTextLabe
<form id="user_form" method="POST" action="/ProjectName/home/">
{% csrf_token %}
<div class="registerLabel">
Full name:
</div>
<div class="registerTextLabel">
<input type="text" id="registerFullName" class="registerTextDetails">
</div>
<div class="registerLabel">
Username:
</div>
<div class="registerTextLabel">
<input type="text" id="registerUsername" class="registerTextDetails">
</div>
<div id="registerButtonDiv">
<button class="registerButtons" id="cancelRegisterButton">Cancel</button>
<button type="submit" class="registerButtons" id="submitRegistration">Register</button>
</div>
</form>
以下是视图的代码:
def register(request):
context = RequestContext(request)
registed = False
if request.method == 'POST':
form = User(data = request.POST)
username = request.POST.get('registerUsername')
password = request.POST.get('registerPass')
user = form.save()
username = User.username
password = User.password
u = User(username,password,...)
u.save()
registered = True
else:
form = User()
return render_to_response('ProjectName/home.html', {'user_form':User}, context)
我不想使用Django的自动化方式,它从模型生成表单 您忘了在表单中定义名称。这对于获取POST数据非常重要
<form .........>
{{error}}<br/><br/>
<div class="registerLabel">Username:</div>
<div class="registerTextLabel">
<input type="text" id="registerUsername" name="registerUsername" class="registerTextDetails">
</div>
<div class="registerLabel" id="registerLabelPass">Password:</div>
<div class="registerTextLabel">
<input type="password" id="registerPass" name="registerPass" class="registerTextDetails">
</div>
</form>
def register(request):
context = RequestContext(request)
registered = False
error = ''
if request.method == 'POST':
username = request.POST.get('registerUsername')
password = request.POST.get('registerPass')
if username and password:
username_exist = User.objects.filter(username=username)
if username_exist:
error = username is already taken, try another
else:
User.objects.create(username=username, password=password)
registered = True
else:
error = all fields are required
return render_to_response('ProjectName/home.html', {'error':error}, context)
{{error}}
用户名:
密码:
def寄存器(请求):
context=RequestContext(请求)
注册=假
错误=“”
如果request.method==“POST”:
username=request.POST.get('registerUsername')
password=request.POST.get('registerPass')
如果用户名和密码:
username\u exist=User.objects.filter(username=username)
如果用户名_存在:
error=用户名已被使用,请尝试其他用户名
其他:
User.objects.create(用户名=用户名,密码=密码)
注册=真
其他:
错误=所有字段都是必需的
返回render_to_响应('ProjectName/home.html',{'error':error},上下文)
这不应该吗
username=User.username
password=User.password
是
User.username=用户名
User.password=password这是我的html文件:
{% block content %}
<div class="container">
<h6 class="dress"><a href="{% url 'home' %}">Home</a> <i> </i> Register </h6>
</div>
<div class="back">
<h2>PRODUCTS</h2>
</div>
<div class="container">
<div class="register">
<h3>PERSONAL INFORMATION</h3>
<form method='POST' action=''>{% csrf_token %}
<div class="mation">
<div>
<span>User Name</span>
<input id="id_username" maxlength="150" name="username" type="text" required />
<span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span></p>
</div>
<div>
<span>Email Address</span>
<input id="id_email" maxlength="254" name="email" type="text" />
</div>
<div>
<span>Password</span>
<input id="id_password1" name="password1" type="password" required />
</div>
<div>
<span>Confirm Password</span>
<input id="id_password2" name="password2" type="password" required />
</div>
</div>
<input type="submit" value="Register">
</form>
</div>
</div>
{% endblock %}
像这样,我在Django中使用自定义文本框表单中的密码输入在哪里?我输入全名和用户名,而不是用户名和密码。现在是OK了,所以POST方法根据文本框的名称获取文本框的值,对吗?我以为我来自ID.request.POST.get('textboxName')是获取此值的正确方法吗?虽然它看起来正确,但仍然不起作用:/it没有显示错误。它会转到home.html页面,但数据没有存储在数据库中:/n这是注册表的正确路径吗:?我更新了返回渲染,它必须在if语句之后。然后告诉我错误是什么,不要忘记在模板中打印错误
{% block content %}
<div class="container">
<h6 class="dress"><a href="{% url 'home' %}">Home</a> <i> </i> Register </h6>
</div>
<div class="back">
<h2>PRODUCTS</h2>
</div>
<div class="container">
<div class="register">
<h3>PERSONAL INFORMATION</h3>
<form method='POST' action=''>{% csrf_token %}
<div class="mation">
<div>
<span>User Name</span>
<input id="id_username" maxlength="150" name="username" type="text" required />
<span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span></p>
</div>
<div>
<span>Email Address</span>
<input id="id_email" maxlength="254" name="email" type="text" />
</div>
<div>
<span>Password</span>
<input id="id_password1" name="password1" type="password" required />
</div>
<div>
<span>Confirm Password</span>
<input id="id_password2" name="password2" type="password" required />
</div>
</div>
<input type="submit" value="Register">
</form>
</div>
</div>
{% endblock %}
class RegistrationForm(forms.ModelForm):
password1 = forms.CharField(label="Password", widget=forms.PasswordInput())
password2 = forms.CharField(label="Confirm Password", widget=forms.PasswordInput())
class Meta:
model = User
fields = ['username', 'email']
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
try:
if ((password1 and password2) and (password1 != password2)):
raise forms.ValidationError("Password Do not Match")
except:
pass
return password2
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user