flask6 cookie

app

from flask import Flask
from flask_script import Manager
from App.ext import db
from App.views import bp

app = Flask(__name__)
app.config.from_pyfile("settings.py")
db.init_app(app)
manager = Manager(app)
# 注册蓝图
app.register_blueprint(bp)

if __name__ == '__main__':
    manager.run()

App.ext

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

settings

DEBUG = True
#  数据库
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:19970223@localhost:3306/sess"
SQLALCHEMY_TRACK_MODIFICATIONS = False

App.views

from datetime import timedelta, datetime
from flask import Blueprint, request, make_response, render_template, redirect
from App.models import User

bp = Blueprint("bp",__name__)

@bp.route("/login/",methods=['GET','POST'])
def login():
    if request.method == "POST":
        # 处理
        username = request.form.get('username')
        password = request.form.get('password')
        print(username,password)
        user = User.query.filter(User.username==username,User.password==password).first()
        print(user)
        if user: # 登录成功
            # 写cookie
            response = redirect("/")
            # 设置cookie有效期是一天
            response.set_cookie("username",username,max_age=3600*24)

            dest = datetime.now() + timedelta(days=3)
            # expires优先级高于max_age
            response.set_cookie("username",username,expires=dest)
            return response
        else: # 登录失败
            return redirect("/login/")
    return render_template("login.html")

# 默认是get请求,如果有其他请求,应该在路由中指定methods
@bp.route("/",methods=['GET','POST'])
def index():
    username = request.cookies.get('username')
    if username:
        return "你是合法用户"
    else:
        return "你是非法用户,请先登录"

# 退出登录
@bp.route("/logout/")
def logout():
    response = make_response("退出登录")
    # 删除指定cookie一个键值对
    response.delete_cookie('username')
    return response

@bp.route("/res/")
def handle_response():
    # 手动生成响应对象
    with open("static/1.jpeg",'rb') as fp:
        content = fp.read()
    res = make_response(content)
    res.headers['Content-Type'] = "image/jpeg"

    # 自定义响应对象
    res = make_response("<h2>Hello world</h2>")
    res.headers['hello'] = "world"
    print(res.__dict__)

    return res

    # 自动生成响应对象
    # 返回了内容和状态码
    return "hello",200

App.models

from App.ext import db

class User(db.Model):
    __tablename__ = 'user'

    uid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(30), nullable=False)
    password = db.Column(db.String(128), nullable=False)
    gender = db.Column(db.Integer)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="{{ url_for('bp.login') }}" method="post">
    用户名:<input type="text" name="username"> <br>
    密码: <input type="password" name="password"> <br>
    <input type="submit">
</form>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值