gpt4 book ai didi

python - 制作 DJANGO 注册页面最简单的方法是什么?

转载 作者:行者123 更新时间:2023-12-01 09:23:19 24 4
gpt4 key购买 nike

我对 Django 比较陌生,但上周我花了无数时间学习如何制作网络应用程序。我已经放弃了许多 promise 进行用户注册的教程,但它们都导致我的页面崩溃并变得完全空白。

我现在再次重新开始,但这一次我制作了一个完整的应用程序,专门用于用户登录/注销/注册。我终于可以登录了,但这对我没有任何好处,因为我没有任何用户帐户。

我现在只是要求一种非常简单的方法来制作一个用户注册页面,允许用户在该页面上创建帐户以查看主页并能够在其上编辑内容。我看过多个教程和documentations ,并且真的希望有人能给我一个可靠的答案。

提前致谢。

如果有帮助,这就是我到目前为止的代码的样子:(还值得一提的是,我正在使用 Cloud9 IDE)

View .py

from django.contrib.auth import (
authenticate,
get_user_model,
login,
logout,
)
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from .forms import UserLoginForm

# Create your views here.
def login_view(request):
title = "Login"
form = UserLoginForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# or any other success page
# return HttpResponse("Logged in")
return HttpResponseRedirect('accounts/home')
return render(request, "accounts/form.html", {"form":form, "title": title})

表单.py

from django import forms
from django.contrib.auth import (
authenticate,
get_user_model,
login,
logout,

)

User = get_user_model()

class UserLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)

class Meta:
model = User
fields = ('username', 'email', 'password')

def clean(self,*args,**kwargs):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
user = authenticate(username=username,password=password)
if not user:
raise forms.ValidationError("This user does not exist")
if not user.check_password(password):
raise forms.ValidationError("Incorrect Password")
if not user.is_active:
raise forms.ValidationError("This user is no longer active.")
return super(UserLoginForm, self).clean(*args,**kwargs)

form.html(当前使用这个进行登录,开放使用相同格式进行注册)

{% extends 'accounts/base.html' %}
{% block main_content %}
<div class="container">
<div class='col-sm-6 col-sm-offset-3'>
<h1>{{ title }}</h1>
<form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
{{ form }}
<input type='submit' class='btn btn-primary btn-block' value='{{ title }}' />
</form>
</div>
</div>
{% endblock %}

(旁注,我知道这不是我主要要求的一部分,但我的登录页面看起来不像我想要的那样,就像这里的引导登录页面 https://getbootstrap.com/docs/4.0/examples/sign-in/ 。这是 what it looks like right now

如果你能帮我解决这个问题,那对我来说就意味着整个世界。谢谢。另外,如果您认为这是因为我没有链接到 CSS 页面,那么这是我的基本模板的外观和结构:

{% load staticfiles %}

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Accounts</title>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'accounts/signin.css' %}" />
</head>

<body>


<div class="jumbotron">
<div class="container">

{% block main_content %}
{% endblock %}
</div>
</div>

</body>

</html>

What My Framework Looks Like

衷心感谢阅读本文的人。

最佳答案

现在您已经看到了,login_view ,适用于您的表单,UserLoginForm ,接受一些 POST 数据并尝试登录用户。您可以重用此逻辑的大部分内容来创建创建用户的 View 。事实上,由于 Django 定义了 UserCreationForm对于您来说,您甚至不必自己制作一个(假设您使用的是默认的身份验证模型):https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth.forms.UserCreationForm

由于这是一个学校项目,我不会为您编写代码,但仔细考虑一下,您就有了一个良好的开端:

  1. 您需要一个将一些 POST 数据输入表单的 View - 您知道如何做到这一点。
  2. 您的 View 需要验证该表单 - 您也知道如何做到这一点。由于您使用的是 Django 的内置表单,因此您还将拥有其内置验证器。
  3. 您需要以新用户身份保存该表单中的数据。这部分将是新的。如果使用内置UserCreationForm ,这是 ModelForm ,您可以使用form.save() 。您应该阅读 ModelForms了解为什么会出现这种情况:https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#django.forms.ModelForm另一方面,如果您决定编写自己的表单,那么您将需要访问该表单数据并使用它手动创建新用户。您知道如何访问表单数据 - 您正在登录 View 中执行此操作 - 因此您需要做的就是使用该数据创建用户而不是登录用户。请勿使用 User.objects.create为此 - 使用 User.objects.create_user 。阅读本文以了解原因:https://docs.djangoproject.com/en/2.0/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user
  4. 现在您有了一个新用户,但您的 View 仍然需要返回某种响应。接下来会发生什么?渲染欢迎页面,重定向到新位置?由您决定,但看看您的登录 View - 您已经知道如何使用上下文呈现任意模板以及如何重定向到另一个 View 。你可以做任何事!

我希望这可以作为您的起点。一旦您阅读了ModelForms ,您应该清楚如何实现 edit像你描述的那样查看。尝试一下,然后回到 SO 并发布您遇到的问题以及您尝试过的代码的具体问题。一个提示,instance是你的 friend 。

最后,您的登录页面看起来很有趣,因为您使用简单的 {{form}} 呈现表单。模板标签。你可以用 {{form.as_p}} 让它看起来稍微好一点(意见不同)或{{form.as_table}} 。为了获得更好的效果,您要么想要单独渲染每个字段(以便您可以控制它们的样式),要么查看 django-crispy-forms

关于python - 制作 DJANGO 注册页面最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com