Python 为什么工作不干净()?
请帮忙解决这个问题。页面上有以下内容的一种形式:Python 为什么工作不干净()?,python,django,Python,Django,请帮忙解决这个问题。页面上有以下内容的一种形式: from django import forms from userprofile.models import UserProfile from django.contrib.auth.models import User from django.forms import ModelForm from django.conf import settings import os class ChangePasswordForm (forms.Fo
from django import forms
from userprofile.models import UserProfile
from django.contrib.auth.models import User
from django.forms import ModelForm
from django.conf import settings
import os
class ChangePasswordForm (forms.Form):
password1 = forms.CharField (widget = forms.PasswordInput ())
password2 = forms.CharField (widget = forms.PasswordInput ())
def clean (self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get ("password1")
password2 = cleaned_data.get ("password2")
with open (os.path.join (settings.BASE_DIR, "debug_local.txt"), "wb") as f:
f.write (bytes (password1, 'UTF- 8') )
if password1! = password2:
raise forms.ValudationError ("Passwords must be same")
else:
User.set_password (password1)
views.py:
from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.template import loader, RequestContext
from django.core.context_processors import csrf
from userprofile.forms import UserProfileForm
from django.contrib.auth.decorators import login_required
from django.conf import settings
from userprofile.forms import ChangePasswordForm
def custom_proc (request):
return {
'user_profile_show': True,
}
@ login_required
def password_page (request):
t = loader.get_template ('password_page.html')
c = RequestContext (request, {
'form': ChangePasswordForm,
}, [Custom_proc])
return HttpResponse (t.render (c))
密码\u page.py:
{% Extends "base.html"%}
{% Block title%} User profile - pass {% endblock%}
{% Block content%}
<h2> pass page </ h2>
{% For field in form%}
{{Field.error}}
{% Endfor%}
<form action="/userprofile/" method="POST"> {% csrf_token%}
{{Form.as_p}}
<input type="submit" value="send" />
</ form>
{% Endblock%}
{%Extends“base.html”%}
{%Block title%}用户配置文件-传递{%endblock%}
{%Block content%}
翻页
{%形式的字段为%}
{{Field.error}
{%Endfor%}
{%csrf_令牌%}
{{Form.as_p}}
{%Endblock%}
问题在于未工作的函数是干净的()。我正在尝试调试文件debug_local.txt值password1的输出。但是此文件未写入您在clean函数上的缩进是错误的。如果以这种方式缩进,则它只是一个函数,而不是类的方法
class ChangePasswordForm (forms.Form):
password1 = forms.CharField (widget = forms.PasswordInput ())
password2 = forms.CharField (widget = forms.PasswordInput ())
def clean (self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get ("password1")
password2 = cleaned_data.get ("password2")
with open (os.path.join (settings.BASE_DIR, "debug_local.txt"), "wb") as f:
f.write (bytes (password1, 'UTF- 8') )
if password1! = password2:
raise forms.ValudationError ("Passwords must be same")
else:
User.set_password (password1)
您在clean函数上的缩进是错误的。如果以这种方式缩进,则它只是一个函数,而不是类的方法
class ChangePasswordForm (forms.Form):
password1 = forms.CharField (widget = forms.PasswordInput ())
password2 = forms.CharField (widget = forms.PasswordInput ())
def clean (self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get ("password1")
password2 = cleaned_data.get ("password2")
with open (os.path.join (settings.BASE_DIR, "debug_local.txt"), "wb") as f:
f.write (bytes (password1, 'UTF- 8') )
if password1! = password2:
raise forms.ValudationError ("Passwords must be same")
else:
User.set_password (password1)
首先,你需要小心你的空白。这部分是您的代码样式,部分是复制和粘贴,而无需重新格式化。请查看指南。他们让每个人的生活都变得更轻松 在您看来,您永远不会将发布的数据传递给表单,因此表单永远不会验证用户输入 完成后,您可以验证表单 最后,一旦表单有效,就可以设置用户密码 免责声明我已经有一段时间没有编写基于函数的视图了
view.py
@login_required
def password_page(request):
if requesst.method == 'POST':
form = ChangePasswordForm(request.POST)
if form.is_valid():
request.user.set_password(form.cleaned_data.get('password'))
else
form = ChangePasswordForm()
t = loader.get_template('password_page.html')
c = RequestContext (request, {
'form': ,
}, [Custom_proc])
return HttpResponse (t.render (c))
我已删除表单中更改的密码。就我个人而言,我更喜欢这种观点
此外,您的clean()
方法必须返回cleaned_数据
forms.py
def clean (self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get("password1")
password2 = cleaned_data.get("password2")
# DEBUGGING
# Uncomment this, run your view and head to the
# console to see what is happening
# import pdb; pdb.set_trace()
if password1 != password2:
raise forms.ValudationError ("Passwords must be same")
return cleaned_data
首先,你需要小心你的空白。这部分是您的代码样式,部分是复制和粘贴,而无需重新格式化。请查看指南。他们让每个人的生活都变得更轻松
在您看来,您永远不会将发布的数据传递给表单,因此表单永远不会验证用户输入
完成后,您可以验证表单
最后,一旦表单有效,就可以设置用户密码
免责声明我已经有一段时间没有编写基于函数的视图了
view.py
@login_required
def password_page(request):
if requesst.method == 'POST':
form = ChangePasswordForm(request.POST)
if form.is_valid():
request.user.set_password(form.cleaned_data.get('password'))
else
form = ChangePasswordForm()
t = loader.get_template('password_page.html')
c = RequestContext (request, {
'form': ,
}, [Custom_proc])
return HttpResponse (t.render (c))
我已删除表单中更改的密码。就我个人而言,我更喜欢这种观点
此外,您的clean()
方法必须返回cleaned_数据
forms.py
def clean (self):
cleaned_data = self.cleaned_data
password1 = cleaned_data.get("password1")
password2 = cleaned_data.get("password2")
# DEBUGGING
# Uncomment this, run your view and head to the
# console to see what is happening
# import pdb; pdb.set_trace()
if password1 != password2:
raise forms.ValudationError ("Passwords must be same")
return cleaned_data
为什么要将调试输出到文件?使用调试程序pdb/ipdb单步执行代码。通过这种方式,您可以看到每一步都发生了什么。与您的问题无关,但不要在类或函数名称和参数列表()之间留空格。为什么要将调试输出到文件?使用调试程序pdb/ipdb单步执行代码。通过这种方式,您可以看到每一步都在进行什么。与您的问题无关,但不要在类或函数名称和参数列表()之间留空格。我喜欢您的免责声明!谢谢:-)感觉像是很久以前的事了,因为我一直在这么做(一遍又一遍),我喜欢你的免责声明!谢谢:-)感觉像是很久以前的事了,因为我一直在做(一遍又一遍)