Python全栈 Web(Flask框架、cookie, session)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发
cookie:
什么是cookie?
是一种数据存储技术
将一段文本保存在客户端的一种技术 并且可以长时间保存
cookie的使用场合:
记住密码
搜索关键词
在Flask使用cookie
使用 响应对象 来保存cookie到客户端
响应对象:
resp = make_response("响应字符串")
resp = redirect("地址")
响应对象.set_cookie(key, value, max_age)
key:
保存cookie的名称
value:
保存cookie的值
max_age:
保存时间以 s 单位

session 
什么是session
session是保存在服务器为每个浏览器所开辟的一段空

session 在Flask中的实现
配置SECRET_KEY
app.fonfig["SECRET_KEY"] = "YOURGUESS"
使用session:
from flask inport session

1.向session中保存数据
session["key"] = vlaue
2.从session中获取数据
value = session["key"]
3.从session中删除数据
del session["key"]
session 与 cookie
都可以保存数据

保存数据不同
session保存在服务器上
cookie是保存在浏览器上的
保存时间不同
session临时会话保存数据
cookie可以自定义保存时间
安全性问题
session  安全级别较高
cookie   安全级别较低



from flask import Flask, make_response, request, render_template, session, redirect
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@localhost:3306/flask"
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SECRET_KEY'] = 'INPUT A STRING'
db=SQLAlchemy(app)

import pymysql
pymysql.install_as_MySQLdb()

class Users(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer,primary_key=True)
    uname = db.Column(db.String(50),nullable=False)
    upwd = db.Column(db.String(50),nullable=False)
    realname = db.Column(db.String(30),nullable=False)

    def __repr__(self):
        return "<Users %r>" % self.uname

# db.drop_all()
db.create_all()

@app.route('/set_cookie')
def set_cookie():
    # 将响应内容构建成响应对象
    resp = make_response("Set Cookie Success")
    # 保存数据进cookie
    resp.set_cookie('username','sf.zh')
    # 保存数据进cookie并设置max_age
    resp.set_cookie('keywords','Cannon',max_age=60*60*24*365)
    return resp


@app.route('/get_cookie')
def get_cookie():
    # username = request.cookies['username']
    keywords = request.cookies['keywords']
    print('keywords:%s' % (keywords))
    return "get cookie ok"

@app.route('/login',methods=['GET','POST'])
def login():
    if request.method == 'GET':
        # 判断之前是否有成功登录过(id和uname是否存在于cookie上)
        if 'id' in request.cookies and 'uname' in request.cookies:
            return '您已成功登录'
        else:
            # 去往 login.html 模板上
            return render_template('login.html')
    else:
        # 1.接收用户名和密码
        uname = request.form['uname']
        upwd = request.form['upwd']
        # 2.验证用户名和密码是否正确(数据库查询)
        user = Users.query.filter_by(uname=uname,upwd=upwd).first()
        # 3.如果正确的话,判断是否记住密码
        if user:
            resp = make_response('登录成功')
            print(type(user.id))
            # 登录成功
            if 'isSaved' in request.form:
                # 将 id 和 uname 保存进cookie
                m_age = 60*60*24*365
                resp.set_cookie('id',str(user.id),max_age=m_age)
                resp.set_cookie('uname',uname,max_age=m_age)
            return resp
        else:
            # 4.如果不正确的话,则给出提示
            return "登录失败"
        pass

@app.route('/setSession')
def setSession():
    session['username'] = 'sanfeng.zhang'
    return "Set session Success"

@app.route('/getSession')
def getSession():
    username = session['username']
    return 'session值为:'+username

@app.route('/delSession')
def delSession():
    del session['username']
    return "Delete Session Success"

@app.route('/sign_in',methods=['GET','POST'])
def sign_in():
    if request.method == 'GET':
        return render_template('sign_in.html')
    else:
        uname = request.form['uname']
        upwd = request.form['upwd']
        user = Users.query.filter_by(uname=uname,upwd=upwd).first()
        if user:
            # 登录成功,将信息保存进 session
            session['id'] = user.id
            session['uname'] = user.uname
            return redirect('/index')
        else:
            # 登录失败,回到sign_in.html
            return render_template('sign_in.html')

@app.route('/index')
def index():
    # 判断用户是否登录成功
    if 'id' in session and 'uname' in session:
        uname = session['uname']
    return render_template('index.html',params=locals())

@app.route('/sign_out')
def sign_out():
    if 'id' in session and 'uname' in session:
        del session['id']
        del session['uname']
    return redirect('/index')

@app.route('/create_xhr')
def create_xhr():
    return render_template('xhr.html')



if __name__ == '__main__':
    app.run(debug=True)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
搜索推荐 API 数据库
使用 Flask 构建一个简单的 Web 应用
【10月更文挑战第3天】使用 Flask 构建一个简单的 Web 应用
|
1天前
|
存储 SQL 数据库
使用Python和Flask框架创建Web应用
【10月更文挑战第3天】使用Python和Flask框架创建Web应用
12 1
|
2天前
|
数据库 开发者 Python
使用Python和Flask构建Web应用
【10月更文挑战第2天】使用Python和Flask构建Web应用
10 1
|
6天前
|
API 数据库 开发者
Flask:Python的轻量级Web框架
Flask:Python的轻量级Web框架
14 2
|
4天前
|
开发者 C++ Python
从零到一,Django/Flask带你走进Web开发的梦幻世界!
从零到一,Django/Flask带你走进Web开发的梦幻世界!
13 0
|
5天前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
在浩瀚的IT宇宙中,Web开发如同璀璨星河中的一片繁华之地,吸引着无数追梦者前来探索与征服。对于初入此行、渴望脱颖而出的你,Django与Flask无疑是两把开启成功之门的钥匙。它们以各自独特的魅力,助力无数开发者踏上了从平凡到非凡的逆袭之旅。
14 0
|
5天前
|
测试技术 iOS开发 MacOS
Python和Web--使用Web框架之Flask简单用例
Python和Web--使用Web框架之Flask简单用例
|
1月前
|
Python
使用Python和Flask构建简单的Web应用
使用Python和Flask构建简单的Web应用
34 6
|
1月前
|
存储 JSON 数据库
使用Flask构建简单的Web应用
使用Flask构建简单的Web应用
42 3
|
2月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
142 0