django_layui+jquery+token实现平台的登录

一、我们现在做一个登录页面
1、layui :前端开发框架,类似vue
2、jquery:js代码

二、layui的静态资源引用
layui静态资源下载:Layui - 经典开源模块化前端 UI 框架

image.png

image.png

三、下载js静态资源
https://code.jquery.com/jquery-3.6.0.min.js
打开后不要害怕,你没看错

image.png

image.png


点击右键,另存为就行了

四、django中加载layui和js的静态资源

在项目的根目录下建一个 static文件夹,把下载的都放进去

image.png

image.png

然后在settings.py中把路径加载进去

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

五、现在我们来看前端代码

{% load static %}   {#加载静态资源路径#}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
   {#加载所有静态资源#}
    <link rel="stylesheet" href="{% static 'css/layui.css' %}">
    <link rel="stylesheet" href="{% static 'css/modules/laydate/default/laydate.css' %}">
    <link rel="stylesheet" href="{% static 'css/modules/layer/default/layer.css' %}">
</head>
<body>
<div class="layui-container">
    <div class="layui-row" style="margin-top: 200px">
        <div class="layui-col-xs6layui-col-sm6 layui-col-md6 layui-col-xs-offset3 layui-col-sm-offset3 layui-col-md-offset3">
            <div class="layui-row layui-col-space15">
                <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
                    <div class="layui-panel">
                        <div style="padding: 30px;">
                            <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
                                <legend>自动化测试平台登录</legend>
                            </fieldset>
                            <form class="layui-form" action="" lay-filter="example">
                                <div class="layui-form-item">
                                    <label class="layui-form-label">用户名</label>
                                    <div class="layui-input-block">
                                        <label>
                                            <input type="text" name="username" lay-verify="title"  autocomplete="off"
                                                   placeholder="请输入用户名"
                                                   class="layui-input">
                                        </label>
                                    </div>
                                </div>
                                <div class="layui-form-item">
                                    <label class="layui-form-label">密码</label>
                                    <div class="layui-input-block">
                                        <label>
                                            <input type="password" name="password" placeholder="请输入密码"
                                                   autocomplete="off"
                                                   class="layui-input">
                                        </label>
                                    </div>
                                </div>
                                <div class="layui-form-item">
                                    <div class="layui-input-block">
                                        <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
                                        <button class="layui-btn layui-btn-primary">注册</button>
                                    </div>
                                </div>

                            </form>

                        </div>
                    </div>
                </div>
            </div>

        </div>

    </div>
</div>
{#加载js资源#}
<script src={% static "jquery-3.6.0.min.js" %}></script>
<script src={% static "layui.js" %}></script>
<script src={% static "layui.all.js" %}></script>
<script src="{% static 'lay/modules/layer.js' %}"></script>

<script>

    layui.use('layer', function () {
        layer = layui.layer;

    });
    layui.use('form', function () {
        form = layui.form;

    });
{# 发送ajax请求#}
    form.on('submit(formDemo)', function (data) {
        {#/do_login/代表发送请求的链接,data.field是form表单中请求的所有参数,function (result)是回调函数#}
        $.post("/do_login/", data.field, function (result) {
            if (result.code == 0) {
                layer.msg(result.message, {time: 3000}, function () {
                    window.location.href = "/basic/"; 
                });

            } else  {
                layer.msg(result.message, {time: 3000});
            }
        });
        return false;
    });
</script>

</body>
</html>

2、后端代码
(1)登录

from django.core.signing import BadSignature
from django.db import IntegrityError
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.authtoken.models import Token
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.http import JsonResponse

@api_view(["POST", ])
def api_do_login(request):
    username = request.POST.get("username")
    print("username:" + str(username))
    password = request.POST.get("password")
    print("password:" + str(password))
    uid = 0
    token = ""
    if username not in [None, ""]:
        if password not in [None, ""]:
            user = authenticate(username=username, password=password)
            if user not in [None, ""]:
                uid = user.id
                token = Token.objects.filter(user=user).first().key
                res = {"code": 0, "message": "登录成功", "uid": uid, "token": token}
            else:
                res = {"code": 10000, "message": "用户名或密码错误"}

        else:
            res = {"code": 10001, "message": "密码不能为空"}

    else:
        res = {"code": 10001, "message": "用户名不能为空"}
    response = JsonResponse(res)
    if res["code"] == 0: #如果登录成功,则种cookie,max_age是cookie超时时间
        response.set_signed_cookie("uid", uid, salt="adbc", max_age=600)
        response.set_signed_cookie("token", token, salt="adbc", max_age=600)
    return response

(2)再次登录,如果token存在,且正确,直接显示首页

@api_view(["GET", ])
def api_basic(request):
    try:
        uid = request.get_signed_cookie("uid", salt="adbc")
        token = request.get_signed_cookie("token", salt="adbc")
        if uid not in ["", None]:
            if token not in ["", None]:
                key = Token.objects.filter(user_id=uid).first().key
                print("key=" + key)
                print("token=" + token)
                if token == key:
                    res = render(request, "basic.html")
                else:
                    res = render(request, "login.html")
            else:
                res = render(request, "login.html")
        else:
            res = render(request, "login.html")
    except BadSignature:   #加的盐校验不正确
        res = render(request, "login.html")
    except KeyError: #token错误
        res = render(request, "login.html")
    return res
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于 Django + Layui + 原生 SQL 语句实现登录的详细步骤: 1. 创建 Django 项目并安装必要的包,包括 Django、pymysql 等。可以使用以下命令创建一个名为 myproject 的 Django 项目: ``` django-admin startproject myproject ``` 2. 在 myproject 项目中创建一个名为 login 的应用程序,可以使用以下命令: ``` python manage.py startapp login ``` 3. 在 login 应用程序中创建一个名为 models.py 的文件,并定义一个 User 模型,其中包含用户名和密码: ```python from django.db import models class User(models.Model): username = models.CharField(max_length=50) password = models.CharField(max_length=50) ``` 4. 在 myproject 项目的 settings.py 文件中配置数据库连接,例如使用 MySQL 数据库: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', } } ``` 5. 在 login 应用程序中创建一个名为 views.py 的文件,并编写一个名为 login 的视图函数,用于处理登录请求: ```python from django.shortcuts import render from django.http import JsonResponse from django.db import connection def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') with connection.cursor() as cursor: cursor.execute('SELECT * FROM login_user WHERE username=%s AND password=%s', [username, password]) user = cursor.fetchone() if user: # 登录成功 return JsonResponse({'code': 0, 'msg': '登录成功'}) else: # 登录失败 return JsonResponse({'code': 1, 'msg': '用户名或密码错误'}) else: return render(request, 'login.html') ``` 6. 在 login 应用程序中创建一个名为 templates 的文件夹,并在其中创建一个名为 login.html 的模板文件,用于显示登录页面: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> <link rel="stylesheet" href="{% static 'layui/css/layui.css' %}"> </head> <body> <div class="layui-container"> <div class="layui-row layui-col-space15"> <div class="layui-col-md6 layui-col-md-offset3"> <form class="layui-form" action="{% url 'login' %}" method="post"> {% csrf_token %} <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-block"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-block"> <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="login">登录</button> </div> </div> </form> </div> </div> </div> <script src="{% static 'layui/layui.js' %}"></script> <script> layui.use(['form'], function(){ var form = layui.form, $ = layui.jquery; }); </script> </body> </html> ``` 7. 在 myproject 项目中的 urls.py 文件中配置路由,例如: ```python from django.urls import path from login import views urlpatterns = [ path('login/', views.login, name='login'), ] ``` 8. 运行 Django 项目并访问登录页面,例如: ``` python manage.py runserver ``` 然后在浏览器中访问 http://localhost:8000/login/ 即可看到登录页面。 以上就是一个基于 Django + Layui + 原生 SQL 语句实现登录的详细步骤。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值