修改使用django框架创建的注册选项卡。

我做了一个注册标签,可以注册新的用户和登录页面,允许注册用户继续使用网站。我希望如果任何注册用户(有一个注册的电子邮件)试图再次注册,错误信息应该弹出’你已经有一个帐户,请登录’。我把注册用户的数据存储在models.py中创建的名为SignedUpUsers的表中,请帮助我实现我的任务。

models.py


# Create your models here.


class SignedUpUsers(models.Model):
    email = models.EmailField(max_length=122)
    name = models.CharField(max_length=122)
    username = models.CharField(max_length=122)
    password = models.CharField(max_length=122)
    date = models.DateField()

    def __str__(self):
        return self.name

视图.py

from Home.models import SignedUpUsers
from django.contrib import messages
from datetime import datetime

def login(request):
    return render(request, 'login.html')


def signup(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        email = request.POST.get('email')
        username = request.POST.get('username')
        password = request.POST.get('password')
        cont = SignedUpUsers(name=name,email=email,username=username,password=password,date=datetime.today())
        cont.save()
        messages.success(request,"\t\tYour account has successfully been created . Kindly Log In\t\t")
    return render(request, 'signup.html')

登录.html

<!--Form-->
<form method="post" action="/signup" style="
    position: absolute;
    top: 260px;
    left: 500px;
    font-size: larger;
">
    {%csrf_token%}
    <!--Email-->
  <div class="form-group" >
    <label for="email">Email address</label>
    <input type="email" size="25" class="form-control" id="email" name="email" placeholder="name@example.com" style="block-size: 25px; position: absolute; left: 120px;">
  </div>
    <!--Name-->
    <div class="form-group" >
    <label for="name" style="position: absolute;left: 0px;top: 30px;">Name</label>
    <input type="text" size="25" class="form-control" id="name" name="name" placeholder="Arbaaz Ahmed" style="block-size: 25px;position: absolute;left: 120px;top: 30px;">
  </div>
    <!--Username-->
    <div class="form-group" >
    <label for="username" style="position: absolute;left: 0px;top: 60px;">Username</label>
    <input type="text" size="25" class="form-control" id="username" name="username" placeholder="arbaazahmed2134" style="block-size: 25px;position: absolute;left: 120px;top: 60px;">
  </div>
    <!--Password-->
    <div class="form-group" >
    <label for="password" style="position: absolute;left: 0px;top: 90px;">Password</label>
    <input type="password" class="form-control" size="25" id="password" name="password" style="block-size: 25px;position: absolute;left: 120px;top: 90px;">
  </div>
    <!--Sign up Button-->
    <button type="submit" class="btn btn-primary" style="
    position: absolute;
    top: 130px;
    left: 120px;
    background-color: antiquewhite;
    height: 27px;
    width: 100px
">Sign Up</button>
</form>

<!--Account Created-->
{% if messages %}
{% for message in messages%}
<div class="alert alert-{{message.tags}}" role="alert" style="position: absolute; background-color: aqua; left: 470px; top: 430px">
  <!--<h4 class="alert-heading">Well done!</h4>-->
    {{ message }}
</div>
{% endfor %}
{% endif %}

解决方案:

好吧,所以这里是完整的解决方案。我对你现有的解决方案做了一些修改,希望对你有所帮助。

Django自带的内置 User 模型,其中已经内置了认证逻辑。伟大的事情是,它也可以被扩展。所以我创建了 UserDetails 模型,它扩展了 User 使用 OneToOneField. 创建并将以下代码放入models.py中。

模型.py

from django.db import models
from django.contrib.auth.models import User

class UserDetails(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=122)
    dob = models.DateField()

    def __str__(self):
        return self.name

创建后,使用以下命令创建迁移。python manage.py makemigrations 而后 python manage.py migrate

处理注册逻辑。

我们已经创建了模型,现在要从用户那里获取数据,我们需要表单。Django内置了对处理 表格 逻辑。我创建了两个 样板 作为 UserFormUserDetailsForm. 这里有一个棘手的部分,两个表单都是作为一个单独的表单,每个表单都不知道其他表单。所以我创建了一个 表格集 稍后将用于链接我们的 UserUserDetails 视图内。在forms.py中创建并放入以下代码。

表单.py

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

class UserForm(UserCreationForm):
   class Meta:
      model = User
      fields = ('email','username','password1', 'password2',)

class UserDetailsForm(forms.ModelForm):
    class Meta:
        model = UserDetails
        fields = ('name', 'dob',)


from django.forms import inlineformset_factory
# Formset is combining UserForm and UserDetailsForm
UserDetailsFormSet = inlineformset_factory(User, UserDetails, form=UserDetailsForm, 
extra=1, can_delete = False)

要渲染两个表单,请创建一个模板 signUpTemplate.html. (注意:你可以以后再进行样式设计)

signUpTemplate.html

<form method="POST">
    {% csrf_token %}
    {{ user_form.as_p }}
    {{ user_details_form.as_p }}
    <button type="submit">Submit</button>
</form>

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在Dask中重置连接数据框架的索引?

2022-9-9 8:37:17

未分类

当只知道数组的行数时,如何访问数组中的元素?

2022-9-9 8:37:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索