通过Django实现登录功能

需求

  • 1、当访问 http://localhost:8080/login 的时候,跳转到登录页面
  • 2、登录页面中有登录表单,可以输入用户名和密码,还有一个登录按钮
  • 3、当点击登录按钮的时候,Django进行校验
    • 如果用户名是zhangdapeng,zhangdapeng520,则跳转到登录成功页面
    • 否则不跳转,并在当前页面提示用户名或密码失败

实现成功页面

新增templates/home/success.html,用来渲染成功信息:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>
<h1>成功</h1>
</body>
</html>

实现登录页面

新增templates/home/login.html,用来渲染登录页面:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="/login/" method="post">
    {% csrf_token %}
    <div>
        <label for="username">用户名</label>
        <input id="username" name="username" type="text">
    </div>
    <div>
        <label for="password">密码</label>
        <input id="password" name="password" type="password">
    </div>
    {% if err_msg %}
        <p style="color: red">{{ err_msg }}</p>
    {% endif %}
    <div>
        <input type="submit" value="登录">
    </div>
</form>
</body>
</html>
html 复制代码
<form action="/login/" method="post">

这行代码表明,当点击登录按钮的时候,跳转到后端的 /login/ 路由,也就是home中叫做 login/ 的path,使用的请求方法是POST方法。

html 复制代码
{% csrf_token %}

这行代码表明,当前登录表单支持防止CSRF跨站请求攻击。这是Django内置的一种用来提高网站安全性能的技术,在每个表单的第一行,都应该加上。

html 复制代码
<div>
    <label for="username">用户名</label>
    <input id="username" name="username" type="text">
</div>
<div>
    <label for="password">密码</label>
    <input id="password" name="password" type="password">
</div>

这几行代码提供了一个用于输入用户名和密码的输入框。

html 复制代码
{% if err_msg %}
    <p style="color: red">{{ err_msg }}</p>
{% endif %}

这几行代码使用了Django的条件渲染的技术。表示如果后端传过来了err_msg的变量,则将这个变量的内容以红色字体渲染到页面中。

实现成功页面的视图函数

python 复制代码
def success(request):
    return render(request, "home/success.html")

实现成功页面的路由

python 复制代码
path('success/', views.success),

实现登录页面的视图函数

python 复制代码
def login(request):
    err_msg = ""
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        if username == "zhangdapeng" and password == "zhangdapeng520":
            return redirect("/success")
        err_msg = "用户名或密码错误"
    return render(request, "home/login.html", {"err_msg": err_msg})

这几行代码表明,如果是POST请求,则获取用户名和密码进行校验。校验成功在重定向到 /success 成功页面,否则设置错误信息。

如果是其他请求或者校验没有成功,则重新渲染登录页面。

实现登录的路由

python 复制代码
path('login/', views.login)
相关推荐
SQL-First布道者1 分钟前
全面解构传统持久层框架,拥抱真正的 SQL-First
java·数据库·spring boot·sql·spring·mybatis·spring jdbc
翼龙云_cloud15 分钟前
阿里云国际版代理商:OSS自定义域名绑定与HTTPS配置排障教程
数据库·阿里云·https·云计算
日常筹谋记19 分钟前
ATS选不对运维两行泪:数据中心市电与柴发切换场景的双电源自动转换开关选型笔记
运维·数据库·笔记
小蒜学长35 分钟前
vue旅游攻略网站(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端·旅游
山甫aa1 小时前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web
JavaPub-rodert1 小时前
MongoDB 常用命令和常见问题大全
数据库·mongodb
Dovis(誓平步青云)3 小时前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
城管不管10 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头10610 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗12 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习