django实现用户的注册、登录、注销功能

创建django项目的步骤:Django项目的创建步骤-CSDN博客

一、前置工作

配置数据库,设置数据库引擎为mysql

1、在settings文件中找到DATABASES, 配置以下内容
DATABASES = {
    "default": {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'NAME': 'django_test',  # 连接的数据库, 一定要存在
        'HOST': '127.0.0.1',  # mysql的ip地址, 这里是本地
        'PORT': 3306,  # mysql的默认端口
        'USER': 'root',  # mysql的用户名
        'PASSWORD': 'xxx'  # mysql的密码
    }
}

可能会提示以下内容:

安装即可: pip install mysqlclient -i  https://pypi.tuna.tsinghua.edu.cn/simple

二、编写用户模型

django中使用ORM来存数据到数据库

ORM模型(对象关系映射):

 一个 模型类对应数据库中的一张表

一个属性对应数据库中的一个字段

用户表的字段:用户名、密码(可以自己扩展)

1、用户模型

2、创建好模型后要执行迁移数据的命令:

生成迁移文件:python manage.py  makemigrations

迁移生效(同步到数据库):python manage.py  migrate

3、迁移成功后,migrations文件夹下会出现迁移文件,该文件记录着模型的相关信息,001表示第一次迁移.

三、编写表单校验,以注册表单校验为例

使用django自带的Form类来实现校验

1、对字段的校验,这里只截了用户名的校验,其他字段都差不多

2、对整个表单的校验:

User需要从models.py文件中导入

3、form表单中自定义的其他方法:

四、编写前端页面,纯html,文件写在templates文件夹中

使用了模板的方式嵌入数据

超链接的跳转连接:{% url "命名空间:路由的name值" %},有命名空间一定要标注命名空间,没有则:{% url "路由的name值" %}

1、index.html

2、register.html

form.non_field_errors:表当校验时,表单的错误,就是forms.py文件中的

raise  forms.ValidationError("错误信息")。

form.errors.username: 表单校验时,用户名的错误,就是forms.py文件中的error_messages信息,密码校验也是如此。

3、login.html


 

五、编写视图类来实现登录、注册功能

如果是get请求就执行get方法,是post请求就执行post方法,在form标签中的methos方法中可以指定。

form.is_valid():用来校验表单,校验成功返回True, 失败则返回False。

post的方法的实例化表单对象:实例化表单对象时一定要加request.POST,否则拿不到数据。

redirect:  重定向到其他视图函数。

form对象:实例化表单对象,用来进行表单的各种存在,校验,错误信息等待

request.session['username'] = request.POST['username']:  设置session值为用户名(其他值也可以)

六、编写首页和注销视图函数
1、首页函数

request.session.get():通过注册时设置的session中来获取用户,通过这个判断是否有登录的用户,可以与前端交互,有的话就显示注销,没有的话显示注册和登录

2、注销函数

清除session值即可

七、编写路由
1、在主路由中include分路由,并设置命名空间

命名空间:当有多个应用时建议用, 能更好的区分各个应用,使用namespace关键字设置

2、在app下创建一个urls.py文件,编写以下内容

注意:一定要加app_name, 视图类一定要加.as_view()

八、django自带的管理后台

使用python manage.py createtsuperuser创建超级用户

1、在admin.py文件中注册模型

list_display:在后台管理中要显示的字段

admin.site.site_header:后台管理的标题

2、在模型(models.py)中添加

3、使用注册的超级用户登录

九、具体的文件
1、models.py
from django.db import models

class User(models.Model):
    # 定义变量,对应数据库的表的字段
    # username参数:参数1:后台管理显示的内容,参数2:最大长度, CharField类型必须指定,参数3:不能为空,参数4:唯一
    username = models.CharField('用户名', max_length=10, null=False, unique=True)
    password = models.CharField('密码', max_length=255, null=False)
    # create_time参数:参数2:记录数据第一次创建的时间,自动记录到数据库
    create_time = models.DateTimeField('注册时间', auto_now_add=True)

    # 设置后台管理
    class Meta:
        app_label = 'app'  # 属于那个app
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    # 输出对象时用到的
    def __str__(self):
        return self.username
2、forms.py
from django import forms
from .models import User


class RegisterForm(forms.Form):
    # 用户名
    username = forms.CharField(
        required=True,  # 不能为空,必须
        max_length=10,  # 最大长度
        min_length=4,  # 最小长度
        error_messages={
            'required': "不能为空",
            'max_length': "长度不能大于10",
            'min_length': "长度不能小于4",
        }
    )

    # 密码
    password = forms.CharField(
        required=True,  # 不能为空,必须
        max_length=16,  # 最大长度
        min_length=8,  # 最小长度
        error_messages={
            'required': "不能为空",
            'max_length': "长度不能大于16",
            'min_length': "长度不能小于8",
        }
    )

    # 校验
    def clean(self):
        # 获取输入的用户名
        username = self.cleaned_data.get('username')

        user = User.objects.filter(username=username)  # 获得一个查询集,可以理解为一个列表
        # 用户存在
        if user.exists():
            raise forms.ValidationError("用户已存在")

        return self.cleaned_data

    # 存入数据库
    def save(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        # 存入数据库
        user = User(username=username, password=password)
        user.save()


class LoginForm(forms.Form):
    # 用户名
    username = forms.CharField(
        required=True,  # 不能为空,必须
        max_length=10,  # 最大长度
        min_length=4,  # 最小长度
        error_messages={
            'required': "不能为空",
            'max_length': "长度不能大于10",
            'min_length': "长度不能小于4",
        }
    )

    # 密码
    password = forms.CharField(
        required=True,  # 不能为空,必须
        max_length=16,  # 最大长度
        min_length=8,  # 最小长度
        error_messages={
            'required': "不能为空",
            'max_length': "长度不能大于16",
            'min_length': "长度不能小于8",
        }
    )

    # 校验
    def clean(self):
        # 获取输入的信息
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        user = User.objects.filter(username=username)  # 获得一个查询集,可以理解为一个列表
        if user.exists():
            if user[0].password != password:
                raise forms.ValidationError("密码错误")
        else:
            raise forms.ValidationError("用户不存在")

        return self.cleaned_data
3、admin.py
from django.contrib import admin
from .models import User


# Register your models here.
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['id', 'username', 'create_time']


admin.site.site_header = 'django后台管理'
4、views.py
from django.shortcuts import render, HttpResponse, redirect
from django.views import View
from .models import User
from .forms import RegisterForm, LoginForm


# Create your views here.

def index(request):
    username = request.session.get('username', default=0)  # 通过session获取用户名,给默认值防止报错
    user = User.objects.filter(username=username).first()
    return render(request, 'index.html', {'user': user})


class RegisterView(View):
    def get(self, request):
        form = RegisterForm()
        return render(request, 'register.html', {'form': form})

    def post(self, request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('app:login')
        return render(request, 'register.html', {'form': form})


class LoginView(View):
    def get(self, request):
        form = LoginForm()
        return render(request, 'login.html', {'form': form})

    def post(self, request):
        form = LoginForm(request.POST)
        print("登录")
        if form.is_valid():
            # 设置session
            request.session['username'] = request.POST['username']
            return redirect('app:index')
        return render(request, 'login.html', {'form': form})


# 注销
def Logout(request):
    request.session.clear()  # 清除session
    return redirect('app:index')




5、app中的urls.py
from django.urls import path
from .views import *

app_name = 'app'

urlpatterns = [
    path('', index, name='index'),  # 首页

    path('register/', RegisterView.as_view(), name='register'),  # 注册

    path('login/', LoginView.as_view(), name='login'),  # 登录

    path('logout', Logout, name='logout'),  # 注销
]
6、主路由urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path('', include('app.urls', namespace='app'))
]
7、index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

{% if user %}
	<h1>欢迎{{ user.username }}进入首页!!!</h1>
    <a href="{% url 'app:logout' %}">注销</a>
{% else %}
    <h1>请注册或登录</h1>
    <a href="{% url 'app:register' %}">注册</a>
    <a href="{% url 'app:login' %}">登录</a>
{% endif %}

</body>
</html>
8、register.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<h3>注册</h3>
<a href="{% url 'app:login' %}">登录</a>|
<a href="{% url 'app:index' %}">首页</a>
<form action="{% url 'app:register'  %}" method="post">
    {% csrf_token %}

    <div><p style="color: red">{{ form.non_field_errors  }}</p></div>

    <div>
        <lable>用户名</lable>
        <label>
            <input type="text" name="username">
        </label>
        <p style="color: red">{{ form.errors.username }}</p>
    </div>

    <div>
        <lable>密码</lable>
        <label>
            <input type="password" name="password">
            <p style="color: red">{{ form.errors.password }}</p>
        </label>
    </div>
    <button type="submit">注册</button>
</form>
</body>


</html>
9、login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<h3>登录</h3>
<a href="{% url 'app:register' %}">注册</a>|
<a href="{% url 'app:index' %}">首页</a>
<form action="{% url 'app:login'  %}" method="post">
    {% csrf_token %}
    <div><p style="color: red">{{ form.non_field_errors  }}</p></div>
    <div>
        <lable>用户名</lable>
        <label>
            <input type="text" name="username">
            <p style="color: red">{{ form.errors.username }}</p>
        </label>
    </div>

    <div>
        <lable>密码</lable>
        <label>
            <input type="password" name="password">
            <p style="color: red">{{ form.errors.password }}</p>
        </label>
    </div>
    <button>登录</button>
</form>

</body>
</html>

### 回答1: Django是一种使用Python语言编写的高级Web开发框架,它提供了许多功能和工具来简化Web应用程序的开发过程。要实现Django注册登录功能,需要进行以下步骤: 1. 创建Django项目:首先通过命令行工具创建一个新的Django项目。 2. 创建用户模型:使用Django自带的用户模型或创建自定义的用户模型来存储用户注册登录所需的信息,如用户名、密码等。 3. 创建视图函数:定义视图函数来处理用户注册登录请求。注册视图函数处理用户注册请求,验证输入的信息并将用户保存到数据库中。登录视图函数将验证用户提供的登录信息,并根据结果响应用户登录请求。 4. 实现模板:创建HTML模板文件来呈现注册登录表单,并将数据传递给视图函数进行处理。 5. 创建URL映射:设置URL映射,使用户可以通过特定的URL路径访问注册登录页面,并将请求发送到相应的视图函数进行处理。 6. 实现登录状态管理:使用Django提供的登录状态管理工具来管理用户登录状态,如登录后的跳转、登录后的用户信息展示等。 7. 添加安全机制:使用Django提供的安全机制,如密码加密、安全令牌等,保障用户的账号安全。 8. 测试功能:编写测试用例对注册登录功能进行测试,确保功能的正常运行。 以上是实现Django注册登录功能的一般步骤,具体实现过程还需要根据项目的需求和功能扩展进行适配。通过Django提供的丰富功能和简化开发的特性,开发者可以快速实现强大的注册登录功能。 ### 回答2: Django是一个流行的Python Web框架,提供了强大的认证和授权功能,可以轻松实现用户注册登录功能。 首先,我们需要在Django项目中创建一个用户模型,可以使用Django内置的User模型,或者自定义一个用户模型,添加必要的字段,如用户名、密码、邮箱等。 接下来,我们可以使用Django提供的内置视图函数和表单,来实现用户注册登录功能。对于注册功能,我们可以使用Django内置的CreateView视图类,使用UserCreationForm表单来处理用户注册请求。这个表单包含了用户名、密码、邮箱等字段,并提供了数据验证和保存用户功能。 对于登录功能,我们可以使用Django内置的LoginView视图类,使用AuthenticationForm表单来处理用户登录请求。这个表单包含了用户名和密码字段,并提供了用户认证和登录功能。 在视图中,我们可以通过重写相应的函数来自定义注册登录成功后的跳转页面,以及注册登录失败后的错误提示。 在模板中,我们可以使用Django提供的模板标签和模板语法,来渲染注册登录的表单,并显示相应的错误信息。 此外,为了提高用户的安全性,我们可以使用Django提供的密码散列算法和密码哈希函数,对用户的密码进行加密存储,以防止密码泄露。 总结而言,使用Django实现注册登录功能非常简单,我们只需要创建用户模型、使用内置视图函数和表单,并通过自定义视图和模板来实现相应的功能。同时,Django还提供了丰富的认证和授权功能,可以帮助我们更好地管理用户的访问权限和用户会话。 ### 回答3: Django 是一款流行的 Python Web 框架,提供了强大的用户认证和授权功能,可以轻松实现注册登录功能。 要实现 Django注册登录功能,通常需要进行以下几个步骤: 1. 创建用户模型:首先需要创建用户模型,可以使用 Django 自带的 `User` 模型,或者按照自己的需求自定义一个用户模型。 2. 创建注册页面:通过创建注册页面,用户可以输入用户名、密码、邮箱等信息,然后将这些信息传递给后台进行处理。 3. 后台处理注册逻辑:在后台,可以使用 Django 提供的 `Form` 类来验证用户提交的表单数据,确保数据的合法性。然后,可以创建一个新的用户实例,并将用户的输入数据保存到数据库中。 4. 创建登录页面:登录页面允许用户输入用户名和密码,并将这些信息传递给后台进行验证。 5. 后台处理登录逻辑:后台可以利用 Django 提供的 `authenticate` 函数来验证用户提交的登录信息。如果验证成功,可以使用 `login` 函数将用户认证信息存储到 session 中,以便后续的登录状态保持和权限控制。 以上是实现 Django 注册登录功能的基本步骤。除了基本的注册登录功能,我们还可以使用 Django 提供的装饰器和中间件来对用户进行权限控制和用户认证身份的判断。例如,可以使用 `@login_required` 装饰器来限制页面的访问必须登录后才能访问。 总之,Django 提供了强大的用户认证和授权功能,可以帮助我们轻松实现注册登录功能,并且提供了灵活的配置选项和扩展功能,以适应各种不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值