使用装饰器完成用户身份验证

栏目: Python · 发布时间: 5年前

内容简介:使用flask框架创建一个简单的用户登录页面,并使用装饰器完成用户身份验证1、先使用flask框架完成一个基础的页面,创建一个app.py文件2、使用模板生成一个简单的登录页面,在项目路径下创建一个templates目录用于存放html页面

使用flask框架创建一个简单的用户登录页面,并使用装饰器完成用户身份验证

1、先使用flask框架完成一个基础的页面,创建一个app.py文件

from flask import Flask


app = Flask(__name__)


@app.route('/login',methods=['GET','POST') 
def login():
    return 'Hellow World!'

if __name__ == '__main__':

    app.run()

2、使用模板生成一个简单的登录页面,在项目路径下创建一个templates目录用于存放html页面

创建登录的html页面login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户登录</h1>
        <form method="post">
            <input type="text" name="user">
            <input type="text" name="pwd">
            <input type="submit" value="登录">{{error}}
        </form>
</body>
</html>

修改login视图函数,渲染模板文件,如果判断用户名密码正确怎进行跳转

from flask import Flask, render_template

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == "GET":
        return render_template('login.html')
    else:
        user = request.form.get("user")
        pwd = request.form.get("pwd")
        if user == 'zhengdazhi' and pwd == '123':
            return redirect('http://www.zhengdazhi.com')
        return render_template('login.html', error='用户名或密码错误')

3、创建一个主页的html模板index.html

flask的模板语言使用{{ }} 来获取变量,使用{% %} 来执行流程控制语句

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户列表</h1>
    <table>
        {% for k,v in user_dict.items() %}
        <tr>
            <td>{{k}}</td>
            <td>{{v.name}} {{v['name']}} {{v.get('name')}}</td>
            <td><a href="detail/{{k}}">查看详细</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

创建主页的视图函数index

# 创建一些测试数据
USERS = {
    1: {'name': '张三', 'age': 18, 'gender': '男'},
    2: {'name': '李四', 'age': 18, 'gender': '男'},
    4: {'name': '王五', 'age': 18, 'gender': '男'}

@app.route('/', methods=['GET'])
def index():
    return render_template('index.html', user_dict=USERS)

4、创建一个详细页面的模板文件detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1> 详细信息</h1>
    <div>
        {{info.name}}
        {{info.age}}
    </div>
</body>
</html>

创建详细页面的视图函数detail

@app.route('/detail/<int:nid>', methods=['GET'])
def detail(nid):
    # return str(nid)
    info = USERS.get(nid)
    return render_template('detail.html', info=info)

5、修改登录视图函数,在判断用户名和密码正确后写入一个cookie

from flask import Flask, render_template, request, redirect, session

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == "GET":
        return render_template('login.html')
    else:
        user = request.form.get("user")
        pwd = request.form.get("pwd")
        if user == 'zhengdazhi' and pwd == '123':
            <span style="color: #ff0000;">session['user_info'] = user</span>
            return redirect('http://www.zhengdazhi.com')
        return render_template('login.html', error='用户名或密码错误')

6、创建一个验证登录的装饰器函数,用来判断用是否登录,检测浏览器中是否有cookie,如果没有则跳转到登录页面

def check_session(func):
    def inner(*args, **kwargs):
        if not session.get('user_info'):
            return redirect(location='/login/')
        return func(*args, **kwargs)

    return inner

7、在详情页面视图函数 detail上添加身份验证的装饰器

@app.route('/detail/<int:nid>', methods=['GET'])
<span style="color: #ff0000;">@check_session</span>
def detail(nid):
    # return str(nid)
    info = USERS.get(nid)
    return render_template('detail.html', info=info)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《生活大爆炸》之科学揭秘

《生活大爆炸》之科学揭秘

乔治·毕姆 / 韩准、徐漪、江业华、叶夜 / 世界图书出版公司 / 2012-12 / 49.00元

《 之科学揭秘:GEEK探索频道》对流行美剧《生活大爆炸》进行“深度解密”,重点在解读剧中涉及的流行文化及科学元素。正如我们所知,《生活大爆炸》是一部“技术含量很高”的肥皂剧。不光是普通观众,科学家也爱《生活大爆炸》。《 之科学揭秘:GEEK探索频道》中,科学家详尽为你解释了电视剧中出现的科学道理和典故。包括谢尔顿的高深弦理论、霍华德的花生过敏是怎么回事、如果你和谢尔顿的妈妈有同样的信仰该如何看待......一起来看看 《《生活大爆炸》之科学揭秘》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器