首页 > 其他分享 >Django之登录页面优化--添加验证码

Django之登录页面优化--添加验证码

时间:2023-08-19 22:58:33浏览次数:54  
标签:登录 -- py request 验证码 Django import login

Django之登录页面优化--添加验证码

前面写的Django项目,前端登录页面较简单如下图,为了美化操作这边优化了前端登录页面。为了只专注登录页面优化这边新构建一个项目用于测试,后续在CV使用到其他项目上。

 

创建项目及应用

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

配置应用

  1. 在myproject/settings.py文件的INSTALLED_APPS列表中添加myapp应用:
INSTALLED_APPS = [
  ...
  'myapp',
]

创建视图文件

  1. 在myapp应用下创建一个新的视图文件views.py,并编写以下代码:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib import messages
from django.http import HttpResponse


def login_view(request):
  if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    captcha = request.POST.get('captcha')
    
    # 验证码校验
    if captcha != 'ABCD':
      messages.error(request, '验证码错误')
      return redirect('login')
    
    # 身份验证
    user = authenticate(request, username=username, password=password)
    if user:
      login(request, user)
      return HttpResponse('登录成功!')
    else:
      messages.error(request, '用户名或密码错误')
      return redirect('login')
  
  return render(request, 'login.html')

创建模版文件

  1. 在myapp下创建一个新的templates文件夹,并在其中创建一个名为login.html的HTML模板,内容如下:
<!DOCTYPE html>
<html>
<head>
  <title>登录</title>
</head>
<body>
  {% if messages %}
    {% for message in messages %}
      <p>{{ message }}</p>
    {% endfor %}
  {% endif %}

  <form method="POST">
    {% csrf_token %}
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required>
    
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>
    
    <label for="captcha">验证码:</label>
    <input type="text" id="captcha" name="captcha" required>

    <img src="/captcha.jpg" alt="验证码">
    
    <button type="submit">登录</button>
  </form>
</body>
</html>

配置路由

  • 在myproject/urls.py文件中添加以下URL配置:

 

from django.contrib import admin
from django.urls import path
from myapp.views import login_view

urlpatterns = [
  path('admin/', admin.site.urls),
  path('login/', login_view, name='login'),
]

创建数据库及用户

python manage.py migrate
python manage.py createsuperuser

 

运行访问

通过http://localhost:8000/login/访问登录页面,输入用户名、密码和验证码后进行登录操作。请注意,以上示例中的验证码是硬编码为"ABCD"
python manage.py runserver

 

 

 

标签:登录,--,py,request,验证码,Django,import,login
From: https://www.cnblogs.com/weiweirui/p/17643351.html

相关文章

  • 2023年8月18日
        今天早上起来背了10个英语单词,然后学习了一个小时的java,写了一会英语阅读,然后和朋友出去打了两个小时的羽毛球,最后写了一会作业。    明天打算看一小时的电视剧,然后和朋友出去玩一会,打一两个小时的篮球,最后晚上练一小时的字,然后学习一小时的java。......
  • 2023年8月17日
    今天早上起来背了10个英语单词,然后学习了一个小时的java,写了一会英语阅读,然后和朋友出去打了两个小时的羽毛球,最后写了一会作业。    明天打算看一小时的电视剧,然后和朋友出去玩一会,打一两个小时的篮球,最后晚上练一小时的字,然后学习一小时的java。......
  • 67个常用pandas命令
    导入数据pd.DataFrame()#自己创建数据框,用于练习pd.read_csv(filename)#从CSV⽂件导⼊数据pd.read_table(filename)#从限定分隔符的⽂本⽂件导⼊数据pd.read_excel(filename)#从Excel⽂件导⼊数据pd.read_sql(query,connection_object)#从SQL表/库导⼊数据p......
  • 2023年8月19日
        今天早上起来背了10个英语单词,然后学习了一个小时的java,写了一会英语阅读,然后和朋友出去打了两个小时的羽毛球,最后写了一会作业。    明天打算看一小时的电视剧,然后和朋友出去玩一会,打一两个小时的篮球,最后晚上练一小时的字,然后学习一小时的java。......
  • SQL 相关博客
    文章来源: SQLServer存储过程-hoojo-博客园(cnblogs.com) ---SQLServer存储过程--存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。--存储过程中可以包含逻辑控制语句和数据操纵语句,它......
  • Django登录页面优化--动态验证码
    Django登录页面优化--动态验证码本章节添加修改动态验证码功能,基于前一章使用的前端环境进行代码修改。安装依赖库pipinstallPillowpipinstalldjango-simple-captcha添加captcha应用在myproject/settings.py文件的INSTALLED_APPS列表中添加captcha应用 INSTALLED......
  • C/C++ 中 static 关键字解析
    局部静态变量的特点:全局数据区执行到函数内对象声明处首次初始化,若没有显示初始化,自动初始化为0,且只初始化一次始终驻留在全局区,直到程序结束,作用域为局部作用域,在函数或语句块内,生命周期到程序结束全局静态变量的特点:全局区在main函数执行前分配内存并初始化注意:......
  • df_sql_str
    #!/usr/bin/envpython#-*-encoding:utf-8-*-importpandasaspdimportnumpyasnp#生成一个dfdates=pd.date_range('20210913',periods=6)df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))print(df)#定义df输入源,以及目标......
  • mybatis设置命名格式转换 与 批量插入更新&select查询返回自定义实体类 的sql写法
    在mybatis的配置文件中设置了Java实体类驼峰命名与表属性下划线命名的自动转换。在mybatis中,从接口获取到大量数据之后,将数据集合分批量插入更新到表中。在mybatis中,select查询表数据,返回数据的存储类型为自定义的实体类。1.设置Java实体类驼峰命名与表属性下划线......
  • Springboot websocket简单使用
    1、在pom.xml导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>2、在SpringBoot项目的service层中创建一个Host类,其中包含一个getCPUUsage()方法用于定时获取......