Django---用户登陆注册系统的实现(一)

1 搭建项目环境

(1)创建项目
在这里插入图片描述

(2)创建app:

python manage.py startapp login
  • 设置语言和时区:

在这里插入图片描述
(3)数据库表生成

  • 将迁移脚本的内容写入数据库并创建数据库表:
  python manage.py migrate
  • 创建后台登录的超级用户:
 python manage.py createsuperuser

(3)启动开发服务器

  • 方法一(终端):python manage.py runserver
  • 方法二:配置Django Server

在这里插入图片描述

在这里插入图片描述

(4)测试:

在这里插入图片描述

在这里插入图片描述
git提交项目代码到本地仓库

安装插件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

git commit -m loginregist1
git init # 安装插件.ignore, 并生成python上传git项目需要忽略内容的文件.gitignore  git add *  # 添加修改到暂存区
git commit -m "搭建项目开发环境" # 将暂存区的代码提交到本地git仓库  
git log # 查看历史提交记录

2 设计数据库模型

(1)作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息。需要一张用户表User,在用户表里需要保存下面的信息:

用户名(name): 必填,最长不超过128个字符且唯一(unique)
密码(password): 必填,最长不超过256个字符
邮箱地址(email): 使用Django内置的邮箱类型且唯一
性别(gender): 性别, 使用choice,只能选择男或者女或者未知,默认为未知;
创建时间(create_time): 用户创建时间
注意点: auto_now_add=True时为添加时的时间,更新对象时不会有变动。
$ git init # 安装插件.ignore, 并生成python上传git项目需要忽略内容的文件.gitignore $ git add * # 添加修改到暂存区 $ git commit -m "搭建项目开发环境" # 将暂存区的代码提交到本地git仓库 $ git log # 查看历史提交记录
修改时间(modify_time):用户最后一次修改时间
注意点: auto_now=True无论是你添加还是修改对象,时间为你添加或者修改的时间。
最后一次登录时间(last_login_time): 最后一次登录时间
注意点:null=True的话,数据库中该字段是NULL,即允许空值
注意点:blank=False(默认)的话,字段没被赋值则会抛错;和数据验证(表单验证等)有
关.

(2)编辑文件:login/models.py

from django.db import models

# Create your models here.
class SiteUser(models.Model):
    gender_choice=(
        (0,"未知"),
        (1,"男"),
        (2,"女"),
    )

    "用户的数据库模型,注册登录需要"
    name=models.CharField(max_length=128,unique=True,verbose_name="用户名")
    ## unique=True,名字唯一
    password=models.CharField(max_length=256,verbose_name="密码")
    email=models.EmailField(unique=True,verbose_name="电子邮箱")
    gender=models.IntegerField(choices=gender_choice,default=0,verbose_name="性别")
    # auto_now_add=True为添加时间,更新对象时不会有变化
    create_time=models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    modify_time=models.DateTimeField(auto_now=True,verbose_name="最后一次修改的时间")
    # null针对数据库层面,blank针对表单的
    last_login_time=models.DateTimeField(null=True,blank=True,verbose_name="最后一次登陆的时间")
    def __str__(self):
        return self.name
    class Meta:
        verbose_name="网站用户管理"
        verbose_name_plural=verbose_name

(2)注册app:loginRegister/settings.py
在这里插入图片描述
(3)生成迁移脚本,并写入数据库

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
在这里插入图片描述
(4)数据库模型后台管理:login/admin.py

from login.models import SiteUser
class SiteUserAdmin(admin.ModelAdmin):
    list_display = ['name','gender']
    list_filter = ['name']
    list_per_page = 2
    list_display_links = ['name']
admin.site.register(SiteUser,SiteUserAdmin)
  • 添加用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 路由与视图函数框架搭建

在这里插入图片描述
(1)主urls文件:loginRegister/urls.py

在这里插入图片描述

(2)创建子urls文件:login/urls.py
在这里插入图片描述
(3)子视图文件:

login/views.py

在这里插入图片描述

(4)模板login的首页html文件:

templates/login/index.html

在这里插入图片描述

(5)模板login的登录html文件:templates/login/login.html
在这里插入图片描述

(6)模板login的注册html文件:templates/login/register.html
在这里插入图片描述
(7)测试:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4 用户登录的实现

(1)前端页面的优化:templates/login/login.html

<div class="col-sm">
            <h3 style="text-align: center">用户登录</h3>
            ## 修改1. 有message信息则显示, 没有就不显示。
            {% if message %}
            <div class="alert alert-warning" role="alert">
                <strong>登录失败!</strong> {{ message }}
            </div>
            {% endif %}

            <form action="/login/" method="post">
            # 提交登录信息时, 以post方法提交给/login/对应的是视图函数处理
            # Django提供了csrf防攻击的机制, 添加该信息则可顺利访问登陆界面
                {% csrf_token %}
            # name="username"指定表单内容存储的key值名称, eg: {"username":"你填的用户名"}
                <div class="form-group">
                    <label>用户名</label>
                    <input type="text" class="form-control" name="username">
                </div>
                <div class="form-group">
                    <label>Password</label>
                    <input type="password" class="form-control" name="password">
                    <small class="form-text text-muted">密码必须是字母、数字或者特殊符号组成.</small>
                </div>
                <a href="/register/" class="text-success">
                    <ins>新用户注册</ins>
                </a>
                <button type="submit" class="btn btn-primary float-right">登录</button>
            </form>
</div>

在这里插入图片描述

(2)视图函数的完善:login/views.py

def login(request):
    if request.method == 'POST':  ## 如果提交表单信息POST
        username = request.POST.get('username').strip() ## 获取用户名
        password = request.POST.get('password').strip()  ## 获取提交的密码
       # print(username, password)
        if username and password:  ## 如果输入账号和密码
            user = SiteUser.objects.filter(name=username, password=password).first()  ## 用户名和密码是否在数据库中匹配
            if user:  ## 账号密码正确重定向到首页
                return redirect('/index/')
            else:
                message = "用户名或者密码错误" ##账号和密码验证未通过,输出报错信息 
                return render(request, 'login/login.html', {'message': message})  
        else:  
            message = "非法的信息"
            return render(request, 'login/login.html', {'message': message})
    return render(request, 'login/login.html')

在这里插入图片描述

4 session会话与登录的视图函数

登录成功, 存储登录的用户信息到session中

(1) 视图函数的完善:login/views.py

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username').strip()
        password = request.POST.get('password').strip()
        print(username, password)
        if username and password:
            user = SiteUser.objects.filter(name=username, password=password).first()
            if user:
                request.session['is_login']=True
                request.session['user_id'] = user.id
                request.session['username'] = user.name
                return redirect('/index/')
            else:
                message = "用户名或者密码错误"
                return render(request, 'login/login.html', {'message': message})
        else:
            message = "非法的信息"
            return render(request, 'login/login.html', {'message': message})
    return render(request, 'login/login.html')

在这里插入图片描述

在这里插入图片描述

  • 登出时,清空session信息
def logout(request):
    # 如果不是登陆状态,无法登出
    if request.session.get('is_login'):
        request.session.flush()
    return redirect('/login/')

在这里插入图片描述

  • 4
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip 基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip
Django-rest-framework是一个用于构建Web API的强大框架,它提供了许多有用的工具和库,可以帮助我们轻松地构建出一个安全可靠的用户注册和登录系统。 下面是一个简单的Django-rest-framework用户注册与登录的实现: 首先,我们需要安装Django-rest-framework: ``` pip install djangorestframework ``` 接着,我们需要在settings.py文件中添加以下配置: ```python INSTALLED_APPS = [ # ... 'rest_framework', ] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], } ``` 上面的配置将启用TokenAuthentication身份验证和IsAuthenticated权限,这将确保只有已登录的用户才能访问我们的API。 现在,我们可以创建一个名为"users"的Django应用程序,并定义以下模型: ```python from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): pass ``` 接着,我们需要定义序列化器来将User模型转换为JSON格式: ```python from rest_framework import serializers from .models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('username', 'email', 'password') extra_kwargs = {'password': {'write_only': True}} def create(self, validated_data): user = User.objects.create_user( username=validated_data['username'], email=validated_data['email'], password=validated_data['password'] ) return user ``` 上面的代码定义了一个UserSerializer序列化器,将User模型转换为JSON格式。我们使用Meta类来指定模型和要序列化的字段,以及一些额外的参数。在create方法中,我们使用create_user方法创建新用户。 现在,我们可以定义视图来处理用户注册和登录请求: ```python from rest_framework import generics, permissions, status from rest_framework.response import Response from rest_framework.authtoken.models import Token from rest_framework.views import APIView from django.contrib.auth import authenticate, login from .models import User from .serializers import UserSerializer class RegisterView(generics.CreateAPIView): queryset = User.objects.all() serializer_class = UserSerializer permission_classes = [permissions.AllowAny] def post(self, request): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) class LoginView(APIView): permission_classes = [permissions.AllowAny] def post(self, request): username = request.data.get('username') password = request.data.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) token, created = Token.objects.get_or_create(user=user) return Response({'token': token.key}) else: return Response({'error': 'Invalid credentials'}) ``` 上面的代码定义了RegisterView和LoginView视图。RegisterView视图处理用户注册请求,LoginView视图处理用户登录请求。我们在视图中使用UserSerializer序列化器来验证输入数据,并使用TokenAuthentication身份验证来保护API。 现在我们已经完成了用户注册和登录的实现。可以使用POST请求来测试我们的API: - 用户注册: ``` POST /api/register/ { "username": "testuser", "email": "testuser@example.com", "password": "testpassword" } ``` - 用户登录: ``` POST /api/login/ { "username": "testuser", "password": "testpassword" } ``` 如果登录成功,API将返回一个包含Token身份验证密钥的JSON响应。现在,我们可以将此密钥用于所有受保护的API请求中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值