Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么工作不干净()?_Python_Django - Fatal编程技术网

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单步执行代码。通过这种方式,您可以看到每一步都在进行什么。与您的问题无关,但不要在类或函数名称和参数列表()之间留空格。我喜欢您的免责声明!谢谢:-)感觉像是很久以前的事了,因为我一直在这么做(一遍又一遍),我喜欢你的免责声明!谢谢:-)感觉像是很久以前的事了,因为我一直在做(一遍又一遍)