一、前端页面实现,创建login.html

<form method="post" action=""><input style="border-radius: 20px" type="text" class="username" name="form-username" placeholder="用户名"><br><br><input style="border-radius: 20px" type="password" class="password" name="form-password" placeholder="密码"><br><span style="color: darkgoldenrod; margin-right: 5px">没有用户名<a href="/register">点击注册</a></span><div class="signin"><input type="submit" value="点击登录" ></div>
</form>

二、在static下的js中创建login.js

// 登录功能
$(function(){message.showSuccess('请登录用户')let $username = $('.username');$username.blur(fnCheckUsername);function fnCheckUsername() {let username = $('.username').val();if (username==='') {message.showError('用户名不能为空')return;}if(!(/^\w{5,20}$/).test(username)){message.showError('用户名长度为5-20位')}else {message.showSuccess('用户名可以正常使用')}$.ajax({url:'/tx',type:'POST',data:{username:username,},success(res){if(res.image){$('.avtar_img').attr('src',res.image)}}})}// 指定浏览器显示响应式let hd = $(window).width();// alert(wd)if (hd>=620) {$('.login-form').css("width", "30%");} else {$('.login-form').css("width", "80%");}
})

三、后端代码

from bottle import template, request, redirect, response
from bottle import route
from .models import Users
from utils.database import session# 接口视图为了接受ajax并验证用户是否存在,如果存在则返回用户头像,类似于QQ登录
@route("/tx", method='POST')
def tx():username = request.forms.getunicode('username')result = session.query(Users).filter_by(username=username).first().img_urlreturn {'image': result}# 负责加载登录页面
@route("/login")
def login():# title建议添加,方面直接在模板中渲染标题return template('login.html', title='登录页面')# 负责提交post表单
@route("/login", method='POST')
def do_login():# 这里一定要重视,如果使用request.forms.get会出现中文乱码,因此强烈建议所有表单使用 request.forms.getunicode()username = request.forms.getunicode('form-username')password = request.forms.getunicode('form-password')try:users = session.query(Users).filter_by(username=username).first().passwordexcept:session.rollback()users = session.query(Users).filter_by(username=username).first().passwordfinally:if users:if users == password:val = session.query(Users).filter_by(username=username).first().nickname如果登录成功,在 response.set_cookie设置属性,生成的cookie字典中account为键,val为值。secret为加密中的salt,max_age为cookie的过期时间response.set_cookie("account", val, secret='123', max_age=800)# db_session.remove()return redirect('/')else:return '用户名或密码错误  <a href="/login">重新登录</a>'else:return redirect('/register')

四、官方文档对cookie的属性解释


五、bottle提升cookie安全性

持续更新2019.9.8

西北乱跑娃 --- bottle微框架从注册到应用(三)相关推荐

  1. 西北乱跑娃 --- bottle微框架从注册到应用(六)

    一.处理数据库错误 在建成bottle连接orm后,出现最大的问题就是程序在服务器上运行一天后,一定会出现500的错误.报错内容: (sqlalchemy.exc.InvalidRequestErro ...

  2. 西北乱跑娃 --- bottle web框架技术讨论

    我的个人博客前面总结了很多关于bottle以及bottle插件的使用方法以及问题解决办法,很多问题在bottle官方文档中已经写得比较明确了,所以此篇文章不做过多的赘述. 其中对于bottle框架的丰 ...

  3. 西北乱跑娃 --- bottle框架部署pytorch模型

    一.前言 在网站荡了很多关于深度学习的代码,包括在码云.github和各种博客.但是作者毕竟是一个文科生,也没有怎么接触过深度学习分类的代码,加上那些文章中的代码文件太多,极其晦涩难懂所以在之前的半年 ...

  4. 西北乱跑娃 --- python爬虫

    有勇气的牛排 官网:https://lgch.xyz/ 或 http://920z.net/ 兼职写代码赚米,可进官网查看,千人团队,实力合作,同多家淘宝等店铺合作,质量靠谱,当天结款. 接单范围:p ...

  5. 西北乱跑娃 --- python企业微信审核项目实时反馈

    企业微信如何实现应用内的审批状态实时监控呢?之前我也查了很多文档,当然包括企业微信官方的文档,但是给出的文档内部问题多多,因此,我特意写了这篇博客.将企业微信审核项目实时状态反馈到公司的邮箱或者个人邮 ...

  6. 西北乱跑娃 -- pyinstaller打包静态文件资源

    1.代码文件 import sys import os from bottle import run, routedef source(relative):base = getattr(sys, &q ...

  7. 西北乱跑娃 --- PC使用哆点和Dr.COM登录校园网超时的解决方法

    有勇气的牛排 官网:https://lgch.xyz/ 或 http://920z.net/ 兼职写代码赚米,可进官网查看,千人团队,实力合作,同多家淘宝等店铺合作,质量靠谱,当天结款. 接单范围:p ...

  8. 西北乱跑娃 --- python正则匹配中文以及数字和标点

    很多朋友在做爬虫和数据采集的时候会遇见字符中存在很多的特殊字符,影响数据的质量.今天给大家写一段代码用于数据清洗: 方法一: info = '' str = '<@ba.rem>可以在下列 ...

  9. 西北乱跑娃 --- requests爬虫五大反反爬机制

    提及爬虫相信大家都知道,今天为大家介绍五点解决反爬的机制. 1.SSL证书验证错误 错误: requests.exceptions.SSLError: ("bad handshake: Er ...

  10. 西北乱跑娃 --- python图像基本操作

    import cv2 import numpy as npimg = cv2.imread('fj.png', 0) # gamma函数用于降低图像深色对比,是图像曝光均衡 def adjust_ga ...

最新文章

  1. 开发者:Serverless 从懵比到实战
  2. winform 在指定目录下已经生成资源Image图片的方式
  3. [3/18]Windows Server 2008 服务器配置之一DNS
  4. markdown编辑模式添加除水印图片方法
  5. Java程序编译和运行的过程
  6. 获取GitHub上远程分支内容
  7. linux find 用法详解 + 实例
  8. java数据库实体层封装_Java通过JDBC封装通用DAO层
  9. 远程桌面登陆不上的解决思路
  10. Axure RP 8汉化
  11. 计算机文献检索的步骤实例,数据库检索方法与技巧(上)
  12. Graphics.DrawRectangle 方法
  13. 桌面窗口管理器(dwn.exe)内存占用大怎么解决
  14. 互联网周刊:不痛不痒的信息安全
  15. 奥赛一本通2069:【例2.12 】糖果游戏
  16. 小程序发送模板消息form_id的获取
  17. 嵌入式计算机是专用计算机系统,嵌入式系统是一种专用的计算机系统.doc
  18. protect 继承_c++三种继承方式public,protect,private
  19. php八进制十六进制,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...
  20. js中[object,object]是什么,怎么取值

热门文章

  1. 服务器证书类型有哪些
  2. 【12c】12c RMAN新特性之recover table(表级别恢复)
  3. jupyter报错EnvironmentLocationNotFound: Not a conda environment: /root/anaconda3/envs/anaconda3
  4. ubantu18-ROS环境下配置IMU(STIM300),含驱动下载安装与硬件配置。
  5. 《我是北大旁听生/郑球洋》
  6. 从辣条国家标准到 java 接口规范
  7. 【Java】保留两位小数(不四舍五入)
  8. 【网易云音乐】浏览器控制台抓包(纯前端)
  9. c语言的32位指针加1是多少,c语言中,指针加1的情况.指针变量详细介绍
  10. CUDA error: device-side assert triggered