Flask(三):flask插件+会话(cookie session)+装饰器

flask插件

flask-script 是三方提供的flask项目,交互式插件,可以使用flask-script管理安装项目命令

安装flask-script

pip install flask-script

配置pycharm启动

会话

不使用cookie的登录注册

#密码加密
import hashlib
def set_password(password):
    md5 = hashlib.md5()
    md5.update(password.encode())
    result = md5.hexdigest()
    return result
#登录
@app.route("/login/,methods=["get","post"]")
def login():
    error = ""
    if request.method == "POST":
        email = request.form.get("email")
        password = request.form.get("password")
        if email and password:
            user = User.query.filter_by(email=email,password=set_password()password).first()
            if user is not None:
                return redirect("index")
            else:
                error = "邮箱或者密码错误"
        else:
            error = "参数不能为空"
    return render_template("login.html",error=error)
#注册
@app.route("/register/",methods=["post","get"])
def register():
    error = ""
    if request.method == "POST":
        email = request.form.get("email")
        password = request.from.get("password")
        if email and password:
            user = User.query.filter(User.email==email).first()
            if user:
                error="邮箱已存在"
            else:
                user = User()
                user.email = email
                user.password = set_password(password)
                user.save()
                return redirect("/login/")
        else:
            error = "参数不能为空"
    return render_template("register.html",error=error)

COOKIE

设置cookie

获取cookie

cookie = request.cookies.get("user_id")

print(cookie)

删除cookie

@app.route("/logout/,methods = ["get","post"])
def logout():
    rep = redirect("/login/")
    rep.delete_cookie("email")
    rep.delete_cookie("user_id")
    return rep


          

登录装饰器

def LoginValid(func):
    @functools.wraps(func)   ##保留原来的函数名字
    def inner(*args,**kwargs):
        user_id = request.cookies.get("user_id")
        email = request.cookies.get("email")
        if user_id and email:
            user = User.query.filter(User.email == email,user.id==user_id).first()
            if user:
                return func(*args,**kwargs)
            else:
                return redirect("/login/")
        else:
            return redirect("/login/")
    return inner

flask 中是由装饰器写路由,登录装饰器涉及到两个装饰器的使用

装饰器的顺序

装饰器返回函数的名字

装饰器

SESSION

flask使用session session默认存在内存中的,需要使用插件才能够存储在数据库中,

django中settings.py  中有 secetkey  session_id session内容

flask中没有,需要配置

第一种

第二种:

设置session

from flask import session

session["key"] = 'value'

获取session

删除session

两种方法

会话机制

  • Cookie

    • 优点:成本低,能够解决浏览器访问无状态的问题

    • 缺点:安全性低,cookie 下发到用户,放在用户本地

  • session

    • 优点:解决了cookie安全性的问题,

    • 缺点:成本高,需要放在服务器上面,通常放在数据库中,flask放在内存中

flask请求

通常web服务请求:

  • form表单

  • url get请求

  • ajax

  • 爬虫

django中:

  • request 请求对象 视图中的形参

  • request.POST

  • request.GET

  • request.COOKIES

  • request.META

  • request.body

Flask中 from flask import request

  • request.form 获取post请求的 从表单请求中获取

  • request.args 从url中获取

  • request.cookies cookie

  • request.files 请求携带的文件

  • request.method 请求的方式

  • request.url 请求的路由

  • request.headers 请求的头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值