首页 > 解决方案 > django中的用户注册表单没有注册

问题描述

我正在尝试注册 django 网站的用户,但没有注册我正在发布代码,请帮助我

这是views.py的代码,我在其中得到输入

from django.shortcuts import render , redirect

# Create your views here.
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from .models import User_Main

def become_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request , user)
            user_main = User_Main.objects.create(name = user.username, created_by=user)
            return redirect('home')

    else:
        form = UserCreationForm()


    return render(request, 'user_of_ecommerce/become_user.html' ,{'form':form})

urls.py 的代码

from django.urls import path

from . import views

urlpatterns = [ 
    path('become-user/' , views.become_user , name="become_user")
]

这是表格的代码

    {% extends "core_of_ecommerce/base.html" %}

{% block content %}

    <form action="." method="post" >
        {% csrf_token %}
        {{form.as_p}}
        <div>
            <button>sbmot</button>
        </div>
    </form>

{% endblock content %}

另一个 URLs.py

from django.urls import path

from . import views


urlpatterns = [
    path('' ,views.home, name='home')
]

模型.py

from django.db import models

# Create your models here.
from django.contrib.auth.models import User

class User_Main(models.Model):
    name = models.CharField(max_length = 150)
    created_at = models.DateTimeField( auto_now_add=True)
    created_by = models.OneToOneField(User, on_delete=models.CASCADE , related_name='user_name')

    class Meta:
        ordering = ['name']
    
    def __str__(self):
        return self.name

当我在输入所有详细信息后单击按钮时,它会将我刷新到同一页面我希望你能帮助我,我什至从管理面板检查它没有注册

标签: pythondjango

解决方案


您的模板导致此问题,因为您没有正确提交,请更改按钮提交

<form action="{% url 'login' %}" method="post">
 {% csrf_token %}
    {{form.as_p}}
    <div>
         <input type="submit" value="Register">
    </div>
</form>

至于操作,最好创建一个名为 login 的 url 来处理登录视图

更新

好的,让我们这样做,用这个替换你的注册视图,

    def become_user(request):
        if request.method == 'POST':
            form = UserCreationForm(data=request.POST)
            if form.is_valid():
                user = form.save()
                return redirect('home')

        else:
            form = UserCreationForm()

        return render(request, 'user_of_ecommerce/become_user.html' ,{'form':form})

并验证用户是否已保存(在您的管理页面中),然后我们担心登录。

一旦保存工作,修改你的视图是这样的:

    from django.contrib.auth import authenticate, login


    def become_user(request):
        if request.method == 'POST':
            form = UserCreationForm(data=request.POST)
            if form.is_valid():
                user = form.save()
                cd = form.cleaned_data
                user = authenticate(username=cd['username'], password=cd['password1'])    #new line
                login(request, user, backend='django.contrib.auth.backends.ModelBackend') #new line
                return redirect('home')

        else:
            form = UserCreationForm()

        return render(request, 'user_of_ecommerce/become_user.html' ,{'form':form})

推荐阅读