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

20 篇文章 1 订阅
10 篇文章 0 订阅

一、前端页面实现,创建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_url
    return {'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().password
    except:
    	session.rollback()
    	users = session.query(Users).filter_by(username=username).first().password
    finally:
	    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西北乱跑娃

万水千山总是情,犒赏一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值