0
0 комментариев

Помогите, пожалуйста, исправить ошибку. Я сделал на сайте систему аутентификации и страничку с формой смены пароля.

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):
    if request.method == 'POST':
        form = ChangePasswordForm(request.POST)
        if form.is_valid():
            request.user.set_password(form.cleaned_data.get('password1'))
        else:
            HttpResponseRedirect('http://ya.ru/')
    else:
        form = ChangePasswordForm()
 
    t = loader.get_template('password_page.html')
    c = RequestContext(request, {
                                    'form': form,
    }, [custom_proc])
    return HttpResponse(t.render(c))

forms.py:

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.ValidationError("Passwords must be same")
        else:
            return cleaned_data

password_page.html:

{% 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 %}

Но пароль не изменяется после отправки формы. После отправки формы просто показывается страничка, расположенная по адресу /userprofile/
при этом даже не выводится в файл debug_local.txt отладочная информация (вообще файла такого нет).


Добавить комментарий