我无法解决这个问题,每次显示views.register_user都没有返回Httppresponse.用户注册也不正常,每次都会显示上面的错误文本.昨天它工作正常,但今天显示错误.那么,如何修复这个错误,如何解决这个问题呢?我已经张贴了我的详细代码,请查收.此外,我已经申请了堆栈溢出答案,但没有工作.

下面是我的代码:

Views.py


from django.shortcuts import render, redirect
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from .forms import SignUpForm

def register_user(request):
    if request.method == 'POST':
        form=SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(request, username=username, password = password)
            login(request,user)
            messages.success(request,('You Have Been Registered!'))
            return redirect('home')
        
    
    else:
        form = SignUpForm()
        context = {'form': form}
        return render(request,'authenticate/Register.html',context)

Register.html


{% extends 'authenticate/base.html' %}

{% block content %}

<h2 class="text-center">Register</h2>
<div class="col-md-6 offset-md-3">
    <form method="POST" action ="{% url 'register' %}">
            {% csrf_token %}

            {% if form.errors %}

                       
                        <p>Your Form Has Errors.....</p>
                        
               


            {% endif %}
                {{ form.as_p }}
        <input type="submit" value="Register" class="btn btn-secondary">
   </form>

</div>
<br/><br/>
{% endblock  %}

Forms.py


from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms

class SignUpForm(UserCreationForm):
    email = forms.EmailField(label="",widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Email Address'}))
    first_name = forms.CharField(label="",max_length=100, widget=forms.TextInput(attrs={'class':'form-control','placeholder':'First Name'}))
    last_name = forms.CharField(label="",max_length=100,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Last Name'}))

    class Meta:
        model = User
        fields = ('username','first_name','last_name','email','password1','password2')

    def __init__(self, *args, **kwargs):
         super(SignUpForm, self).__init__(*args, **kwargs)

         self.fields['username'].widget.attrs['class'] = 'form-control'
         self.fields['username'].widget.attrs['placeholder'] = 'User Name'
         self.fields['username'].label=""
         self.fields['username'].help_text='<span class="form-text text-muted"><small>Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</small></span>'
        
         self.fields['password1'].widget.attrs['class'] = 'form-control'
         self.fields['password1'].widget.attrs['placeholder'] = 'Password'
         self.fields['password1'].label=""
         self.fields['password1'].help_text='<ul class="form-text text-muted"><li>Your password can’t be too similar to your other personal information.</li><li>Your password must contain at least 8 characters.</li><li>Your password can’t be a commonly used password.</li><li>Your password can’t be entirely numeric.</li></ul>'
        
         self.fields['password2'].widget.attrs['class'] = 'form-control'
         self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'
         self.fields['password2'].label=""
         self.fields['password2'].help_text='<span class="form-text text-muted"><small>Enter the same password as before, for verification.</small></span>'

推荐答案

该表格似乎无效.在这种情况下,您应该使用相同的表单rerender模板,以便它可以显示错误,因此:

def register_user(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(request, username=username, password=password)
            login(request, user)
            messages.success(request, ('You Have Been Registered!'))
            return redirect('home')

    else:
        form = SignUpForm()
    context = {'form': form}
    return render(request, 'authenticate/register.html', context)

然而,身份验证没有多大意义:您在这里是create个用户,因此您可以立即登录该用户:

def register_user(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST, request.FILES)
        if form.is_valid():
            user = form.save()
            login(request, user)
            messages.success(request, ('You Have Been Registered!'))
            return redirect('home')

    else:
        form = SignUpForm()
    context = {'form': form}
    return render(request, 'authenticate/register.html', context)

Note:虽然大多数表单不处理媒体文件,但最好还是将request.FILES [Django-doc]传递给表单,这样,如果以后添加额外的媒体字段,使用该表单的所有视图确实可以正确地处理这些文件.

Python-3.x相关问答推荐

如何创建多个日志(log)文件

PYSMB中的进度条

如何在M x N数组的行中找到所有值的组合

我不能使用拆分来分隔数据

当我在正则表达式末尾使用斜杠时,为什么会得到不同的结果?

基于Pandas列动态创建分箱,以使观测值数量或计数占总计数的1%.

在一行中读写一个csv文件

根据按不同列中的值分组的平均值划分 DataFrame

裁剪复数以解决 exp 中的溢出错误

Python Regex 查找给定字符串是否遵循交替元音、辅音或辅音、元音的连续模式

通过点和线计算CV2 Homography

python3:字节与字节数组,并转换为字符串和从字符串转换

Seaborn 热图 colored颜色 条标签作为百分比

pythondecorator中的变量范围

如何遍历某些扩展名的文件?

从 IPython 重新加载 Python 扩展模块

Python pathlib 获取父级相对路径

如何对字典的函数输出列表进行单元测试?

三个参数的reduce函数

为什么异步库比这个 I/O 绑定操作的线程慢?