Erw*_*wan 8 forms django python-2.7
我正在尝试使用PasswordResetForm内置函数.
由于我想要自定义表单字段,我编写了自己的表单:
class FpasswordForm(PasswordResetForm):
email = forms.CharField(max_length=30, widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))
class Meta:
model = User
fields = ("email")
def clean_email(self):
email = self.cleaned_data['email']
if function_checkemaildomain(email) == False:
raise forms.ValidationError("Untrusted email domain")
elif function_checkemailstructure(email)==False:
raise forms.ValidationError("This is not an email adress.")
return email
Run Code Online (Sandbox Code Playgroud)
这是我在views.py中的观点
@cache_control(max_age=0, no_cache=True, no_store=True, must_revalidate=True)
def fpassword(request):
form = FpasswordForm(request.POST or None)
if form.is_valid():
email = form.cleaned_data["email"]
if function_checkemail(email):
form.save(from_email='blabla@blabla.com', email_template_name='registration/password_reset_email.html')
print "EMAIL SENT"
else:
print "UNKNOWN EMAIL ADRESS"
Run Code Online (Sandbox Code Playgroud)
我的电子邮件模板是:
{% autoescape off %}
You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}.
Please go to the following page and choose a new password:
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url "django.contrib.auth.views.password_reset_confirm" uidb36=uid token=token %}
{% endblock %}
Your username, in case you've forgotten: {{ user.username }}
Thanks for using our site!
The {{ site_name }} team.
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)
问题是我有一个'NoneType' object has no attribute 'get_host'错误......回溯日志告诉我 current_site = RequestSite(request),请求是None.也许我save()在views.py中添加了其他内容?
当我在表单和内置视图中使用以下方法而没有自定义字段时,一切都运行良好:http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
所以你得到了这个错误,因为它试图在一个设置为的实例上调用一个方法None.这是您应该使用的正确视图:
@cache_control(max_age=0, no_cache=True, no_store=True, must_revalidate=True)
def fpassword(request):
form = FpasswordForm(request.POST or None)
if form.is_valid():
email = form.cleaned_data["email"]
if function_checkemail(email):
form.save(from_email='blabla@blabla.com', email_template_name='registration/password_reset_email.html', request=request)
print "EMAIL SENT"
else:
print "UNKNOWN EMAIL ADRESS"
Run Code Online (Sandbox Code Playgroud)
另一种选择是启用Django Sites Framework.然后你不必传入请求因为get_current_site会返回站点当前实例.这是该逻辑的链接.
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |