Django用户注册和用户配置扩展

这篇具有很好参考价值的文章主要介绍了Django用户注册和用户配置扩展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇是在完成用户登录登出,密码修改功能后,扩展用户注册功能。

关于用户登录、注销、更改密码和重置密码。请查看

Django身份验证初试-CSDN博客

Django登录注销视图-CSDN博客

Django密码修改和重置视图-CSDN博客

用户注册

创建一个表单,让用户输入用户名、真实姓名和密码。
编辑位于account应用程序目录中的forms.py文件

from django.contrib.auth.models import User

class UserRegistrationForm(forms.ModelForm):
	password = forms.CharField(label='Passowrd',widget=forms.PasswordInput)
	password2 = forms.CharField(label='Repeat passowrd',widget=forms.PasswordInput)

	class Meta:
		model = User
		fields = ('username','first_name','email')
	
	def clean_password2(self):
		cd = self.cleaned_data
		if cd['password'] != cd['password2']:
			raise forms.ValidationError("Passwords don't match.")
		return cd['password2']
  • 表单中包含username,first_name,email字段,这些字段讲根据它们对应的模型进行验证。如果用户填写了一个已经存在的用户名,将得到一个验证错误。因为username是一个用unique=True定义的字段。
  • 添加password和password2两个字段,用来确认密码。
  • 定义了一个clean_password2方法,用于对照第一个密码检查第二个密码,如果密码不匹配,则不让表单验证。这个检查是在调用is_valid方法时完成的。

📌Django可以为任何表单字段提供clean_<fieldname>()方法,清楚特定字段的值或引发表单验证错误。表单还包括一个通用的clean()方法来验证整个表单,这对于验证相互依赖的字段非常有用。

📌Django还提供了一个UserCreationForm表单,它位于Django .contrib.auth.forms中,和刚才创建的表单非常相似。

编辑account应用程序的views.py文件

from .forms import EmailPostForm,CommentForm,SearchForm,UserRegistrationForm

def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        if user_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])
            new_user.save()
            template = "account/register_done.html"
            context = {'new_user':new_user}
            return render(request,template,context)
    else:
        user_form = UserRegistrationForm()

    template = "account/register.html"
    context = {'user_form':user_form}
    return render(request,template,context)

这里没有保存用户输入的原始密码,而是使用处理加密的用户模型的set_password()方法进行保存,以保证安全。

编辑account应用的urls.py文件,添加如下URL模式:

path('register/',views.register,name='register'),

在account/ template目录下创建一个新模板,命名为register.html,并使其看起来如下:

{% extends "base.html" %}
{% block title %}Create an account{% endblock %}
{% block content %}
    <h1>Create an account</h1>
    <p>Please, sign up using the following form:</p>
    <form action="." method="post">
        {{ user_form.as_p }}
        {% csrf_token %}
        <p><input type="submit" value="Create my account"></p>
    </form>
{% endblock %}

在同一目录下添加一个模板文件,并将其命名register_done.html。将以下代码添加到其中:

{% extends "base.html" %}
{% block title %}Welcome{% endblock %}
{% block content %}
    <h1>Welcome {{ new_user.first_name }}!</h1>
    <p>Your account has been successfully created. Now you can 
        <a href="{% url 'login' %}">log in</a>.</p>
{% endblock %}

用户模型扩展

编辑account应用程序的models.py文件

from django.db import models
from django.conf import settings

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    date_of_birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d',blank=True)
    
    def __str__(self):
        return 'Profile for user {}'.format(self.user.username)

📌为了保持代码的泛型,请使用get_user_model()方法检索用户模型和AUTH_USER_MODEL设置,以便在定义模型与用户模型的关系时引用它,而不是直接引用auth用户模型。

  • 用户一对一字段允许您将配置文件与用户关联。on_delete参数使用CASCADE,这样当用户被删除时,它的相关配置文件也会被删除。
  • 照片字段是一个ImageField字段。您需要安装Pillow库来处理图像。

在shell中运行以下命令安装Pillow:
python -m pip install pillow

为了让Django在开发服务器上为用户上传的媒体文件提供服务,在项目的settings.py文件中添加以下设置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
  • MEDIA_URL是为用户上传的媒体文件提供服务的基本URL,
  • MEDIA_ROOT是媒体文件所在的本地路径。
  • Django动态地构建相对于项目路径的路径,以使代码更加通用。

编辑项目的主urls.py文件,修改代码如下:

from django.conf import settings
from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

📌Django开发服务器将负责在开发过程中提供媒体文件(也就是DEBUG设置为True时)。
static()辅助函数适合于开发,但不适合生产使用。永远不要在生产环境中使用Django提供静态文件。

编辑account应用程序的admin.py文件,并在管理站点中注册Profile模型,如下所示:

from django.contrib import admin
from .models import Profile

@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ['user','date_of_birth','photo']

让用户在网站上编辑自己的个人资料。

将以下导入和模型表单添加到account应用程序的forms.py文件中:

class UserEditForm(forms.ModelForm):
	class Meta:
		model = User
		fields = ('first_name','last_name','email')

class ProfileEditForm(forms.ModelForm):
	class Meta:
		model = Profile
  • UserEditForm:允许用户编辑自己的名字、姓氏和电子邮件,这些都是Django内置用户模型的属性。
  • ProfileEditForm:这将允许用户编辑我们保存在自定义概要模型中的概要数据。用户将能够编辑自己的出生日期,并上传照片作为个人资料。

编辑account应用程序的views.py文件并导入Profile模型,如下所示:

@login_required
def edit(request):
    if request.method == 'POST':
        user_form = UserEditForm(instance=request.user,data=request.POST)
        profile_form = ProfileEditForm(instance=request.user.profile,data=request.POST,files=request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
    else:
        user_form = UserEditForm(instance=request.user)
        profile_form = ProfileEditForm(instance=request.user.profile)

    template = "account/edit.html"
    context = {'user_form':user_form}
    return render(request,template,context)
  • 使用login_required装饰器是因为用户必须经过身份验证才能编辑他们的配置文件。
  • UserEditForm用于存储内置用户模型的数据
  • ProfileEditForm用于存储自定义概要模型中的附加概要数据。
  • 为了验证提交的数据,将执行两个表单的is_valid()方法。如果两个表单都包含有效的数据,将保存两个表单,调用save()方法来更新数据库中相应的对象。

将以下URL模式添加到account应用程序的urls.py文件中:

{% extends "base.html" %}
{% block title %}Edit your account{% endblock %}
{% block content %}
    <h1>Edit your account</h1>
    <p>You can edit your account using the following form:</p>
    <form action="." method="post" enctype="multipart/form-data">
        {{ user_form.as_p }}
        {{ profile_form.as_p }}
        {% csrf_token %}
    <p><input type="submit" value="Save changes"></p>
    </form>
{% endblock %}

表单中包含enctype="multipart/form-data"来启用文件上传。
使用HTML表单来提交user_form和profile_form表单。文章来源地址https://www.toymoban.com/news/detail-798707.html

到了这里,关于Django用户注册和用户配置扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Django Rest Framework设计与实现用户注册API

    在现代Web应用开发中,RESTful API已成为前后端分离架构中的关键组件。Django Rest Framework (DRF) 是一款基于Django的优秀库,提供了丰富的工具和接口,极大地简化了RESTful API的设计与实现。本文将以用户注册功能为例,展示如何运用DRF构建一个完整的API端点,包括数据验证、模型

    2024年04月25日
    浏览(32)
  • Django基础入门:后台管理 超级用户 数据表注册操作③

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 Django 的后台管理系统是非常出

    2024年02月11日
    浏览(53)
  • 【基于Django框架的在线教育平台开发-02】用户注册功能开发

    用户数据表如下所示: Field Type Extra id int Prime Key Auto Increment password varchar(128) last_login datetime(6) Allow Null is_superuser tinyint(1) username varchar(150) first_name varchar(150) last_name varchar(150) email varchar(254) is_staff tinyint(1) is_active tinyint(1) date_joined datetime(6) nick_name varchar(50) birthday date Allow Null

    2024年02月11日
    浏览(35)
  • Django实现用户注册登录,表单提交后跳转网页(学习笔记)

    效果图如下:   使用命令提示符,进入想存放项目的目录: 在项目coco目录下新建static文件夹,用于存放网页文件的css,js,imgs 在coco_app目录下新建文件夹templates,用于存放需要用到的HTML网页 打开coco文件夹中的settings.py注册coco_app 引用templates 连接数据库,这里我用的MySQL数据

    2023年04月11日
    浏览(80)
  • Django使用DRF + Simple JWT 完成小程序使用自定义用户的注册、登录和认证

    在已经配置好djangorestframework-simplejwt的前提下进行 小程序用户模型类 这里的模型类并未继承django自带的用户模型类,好处是后面小程序用户也是没法进行admin端的,缺点是可能会对django自带的权限管理有影响,如果只有小程序端的用户的话没问题,但是如果还有其它用户的话

    2024年02月10日
    浏览(45)
  • 用python编写注册登录程序,python写用户注册和登录

    大家好,小编来为大家解答以下问题,python注册用户名和密码登录,python编写用户注册登录系统,现在让我们一起来看看吧! 一、登录和注册 1. 案例介绍 本例设计一个用户登录和注册模块,使用 Tkinter 框架构建界面,主要用到画布、文本框、按钮等组件。涉及知识点:Pyt

    2024年04月26日
    浏览(35)
  • Python 使用tkinter设计Windows网页或应用的用户注册登录界面

    上一篇:Python 自定义模块和包设计英语生词本(文件版)-CSDN博客 紧接上一篇博文,当我们熟练掌握自定义模块和包、掌握文件的的读取与写入、掌握正则表达式内置模块\\\"re\\\"、掌握GUI(图形界面)的部分组件后,接着我们将要以上的知识点结合起来,设计一个GUI(图形界面

    2024年02月03日
    浏览(48)
  • 100 行代码实现用户登录注册与 RESTful 接口 - 手把手教程附 Python 源码

    在开发大多数应用时,用户系统都是必不可少的部分,而我们总是需要开发围绕用户的登录,注册,获取,更新等接口。在这篇文章将带你用一百多行代码简洁地实现一套这样的用户鉴权与 RESTful 接口,并使用 Session 来处理用户的登录登出 我们将使用 UtilMeta 框架 完成接口开

    2024年02月19日
    浏览(41)
  • 当前没有源代码管理提供程序进行注册 scanning folder for git repositories 没有注册配置remote.SSH.remotePlatform因此无法写入用户设置问题解决

    使用Windows平台的VScode,利用Remote-SSH插件连接远程Ubuntu服务器,拉取Gerrit仓库,出现问题如下: 远程连接SSH速度特别慢,通常要5分钟以上 连接上去之后无法使用git,注意这里的git是 @builtin 插件,不是需要安装的插件,环境很干净 git显示内容一开始为 当前没有源代码管理提

    2024年02月09日
    浏览(59)
  • 软件著作权实名认证怎么做?【用户注册】如何进行用户注册?

    【用户注册】如何进行用户注册? 第一步:进入中国版权保护中心官网,点击右上角注册。中国版权保护中心 (ccopyright.com.cn)  第二步:进入用户注册页面,阅读用户协议,点击【同意并继续】按钮。 第三步:选择注册的账户身份。著作权人是个人点击个人,著作权人是公司

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包