首页 > 其他分享 >Flask快速入门3

Flask快速入门3

时间:2023-05-15 20:13:43浏览次数:32  
标签:__ username 入门 Flask app request cookie 快速

十一,Flask Cookies
Cookie以文本文件的形式存储在客户端的计算机上。其目的是记住和跟踪与客户使用相关的数据,以获得更好的访问者体验和网站统计信息。

Request对象包含Cookie的属性。它是所有cookie变量及其对应值的字典对象,客户端已传输。除此之外,cookie还存储其网站的到期时间,路径和域名。

在Flask中,对cookie的处理步骤为:

1. 设置cookie:
设置cookie,默认有效期是临时cookie,浏览器关闭就失效
可以通过 max_age 设置有效期, 单位是秒

resp = make_response("success") # 设置响应体
resp.set_cookie("username", "zhangsan", max_age=3600)

2. 获取cookie
获取cookie,通过request.cookies的方式, 返回的是一个字典,可以获取字典里的相应的值

cookie_1 = request.cookies.get("username")

3. 删除cookie
这里的删除只是让cookie过期,并不是直接删除cookie
删除cookie,通过delete_cookie()的方式, 里面是cookie的名字

resp = make_response("del success") # 设置响应体
resp.delete_cookie("username")

十二,Flask 会话
与Cookie不同,Session(会话)数据存储在服务器上。会话是客户端登录到服务器并注销服务器的时间间隔。
需要在该会话中保存的数据会存储在服务器上的临时目录中。
为每个客户端的会话分配会话ID。会话数据存储在cookie的顶部,服务器以加密方式对其进行签名。
对于此加密,Flask应用程序需要一个定义的SECRET_KEY。
Session对象也是一个字典对象,包含会话变量和关联值的键值对。

login.py:

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

app = Flask(__name__)

#加密方式对其进行签名
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'

@app.route('/')
def index():
    if 'username' in session:
        username = session['username']
        return '登录用户名是:' + username + '<br>' + \
                 "<b><a href = '/logout'>点击这里注销</a></b>"
    return "您暂未登录, <br><a href = '/login'></b>" + \
         "点击这里登录</b></a>"

@app.route('/login', methods = ['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
   <form action = "" method = "post">
      <p><input type="text" name="username"/></p>
      <p><input type="submit" value ="登录"/></p>
   </form>
   '''

@app.route('/logout')
def logout():
   # remove the username from the session if it is there
   session.pop('username', None)
   return redirect(url_for('index'))

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

 

十三,Flask 重定向和错误
Flask类有一个redirect()函数。调用时,它返回一个响应对象,并将用户重定向到具有指定状态代码的另一个目标位置。
redirect()函数的原型如下:Flask.redirect(location, statuscode, response)

location 参数是应该重定向响应的URL。
statuscode 发送到浏览器标头,默认为302。
response 参数用于实例化响应。

statuscode 状态代码已标准化:

HTTP_300_MULTIPLE_CHOICES
HTTP_301_MOVED_PERMANENTLY
HTTP_302_FOUND
HTTP_303_SEE_OTHER
HTTP_304_NOT_MODIFIED
HTTP_305_USE_PROXY
HTTP_306_RESERVED
HTTP_307_TEMPORARY_REDIRECT
默认状态代码为302,表示'found'。

Flask类具有带有错误代码的abort()函数。Flask.abort(code)
Code 参数采用以下值之一:
400 - 用于错误请求
401 - 用于未身份验证的
403 - Forbidden
404 - 未找到
406 - 表示不接受
415 - 用于不支持的媒体类型
429 - 请求过多

mysite.py:

@app.route('/')
def index():
    return render_template("login.html")

@app.route('/success/<name>')
def success(name):
    return 'welcome %s;logged in successfully' % name

@app.route('/login',methods = ['POST', 'GET'])
def login():
   error = None
   if request.method == 'POST':
      #print('POST 方法')
      #post方法,通过表单 request.form['nm'] 取值
      user = request.form['nm']
      if user == 'admin':
          return redirect(url_for('success', name=user))
      else:
          #401 - 用于未身份验证的
          abort(401)

   else:
      #print('GET 方法')
      #get方法,通过参数 request.args.get('nm') 取值
      user = request.args.get('nm')
      return redirect(url_for('success',name = user))

 


十四,Flask 消息闪现
Flask 模块包含 flash() 方法。它将消息传递给下一个请求,该请求通常是一个模板。
flash(message, category) ; 其中,
message 参数是要闪现的实际消息。
category 参数是可选的。它可以是“error”,“info”或“warning”。

为了从会话中删除消息,模板调用 get_flashed_messages()。
get_flashed_messages(with_categories, category_filter)
两个参数都是可选的。如果接收到的消息具有类别,则第一个参数是元组。第二个参数仅用于显示特定消息。

Flash.py:

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

app = Flask(__name__)
# 登录用户方法,必须要有安全密钥值,不能登录跳转不了页面,可以自定义一个字符串
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'


@app.route('/')
def index():
    return render_template("login.html")


@app.route('/home')
def home():
    # 验证session设置是否成功
    username = session['username']
    flash('登录成功。')
    # flash 对象实际存储到了session里面,可以存储多个flash值,多个为列表,格式如下:
    # <SecureCookieSession {'username': 'admin', '_flashes': [('message', 'You were successfully logged in'),('message', '登录成功。')]}>
    return render_template("home.html")


@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        user = request.form['nm']
        if user != 'admin':
            error = 'Invalid username or password. Please try again!'
        else:
            session['username'] = request.form['nm']
            flash('You were successfully logged in')
            # flash 对象实际存储到了session里面格式如下:
            # <SecureCookieSession {'username': 'admin', '_flashes': [('message', 'You were successfully logged in')]}>
            return redirect(url_for('home'))
    return render_template('login.html', error=error)


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

 


home.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>home</title>
</head>
<body>
{% with messages = get_flashed_messages() %}
    {% if messages %}
        {% for message in messages %}
            <p>{{ message }}</p>
        {% endfor %}
    {% endif %}
{% endwith %}
<h3>Welcome!
    {% if session['username'] %}
        <p>{{ session['username'] }}</p>
    {% endif %}
</h3>
<a href="{{ url_for('login') }}">login</a>
</body>
</html>

 

十五,Flask 文件上传
Flask 中处理文件上传非常简单。它需要一个 HTML 表单,其 ​enctype​ 属性设置为“​multipart/form-data”​,将文件发布到 URL。
URL 处理程序从 ​request.files[]​ 对象中提取文件,并将其保存到所需的位置。
每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。
目标文件的名称可以是硬编码的,也可以从 ​request.files[file] ​对象的​ filename ​属性中获取。
但是,建议使用 ​secure_filename()​ 函数获取它的安全版本。

可以在 Flask 对象的配置设置中定义默认上传文件夹的路径和上传文件的最大大小。
app.config['UPLOAD_FOLDER'] 定义上传文件夹的路径
app.config['MAX_CONTENT_LENGTH'] 指定要上传的文件的最大大小(以字节为单位)

upload.html:

<html>
<head>
  <title>File Upload</title>
</head>
<body>
    <form action="http://localhost:5000/uploader" method="POST" enctype="multipart/form-data">
        <input type="file" name="file"  />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

 

upFile.py:

from flask import Flask, render_template, request, current_app
from werkzeug.utils import secure_filename

import os

app = Flask(__name__)

with app.app_context():
    # within this block, current_app points to app.
    print ("app_context: "+str(current_app.name))

#定义上传文件夹的路径
app.config['UPLOAD_FOLDER'] = 'upload/'
#指定要上传的文件的最大大小(以字节为单位)
app.config['MAX_CONTENT_LENGTH'] = 1024 * 10

@app.route('/upload')
def upload_file():
    return render_template('upload.html')

@app.route('/uploader', methods=['GET', 'POST'])
def uploader():
    if request.method == 'POST':
        #每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。
        f = request.files['file']
        print(f.filename)
        #保存文件到指定路径
        #目标文件的名称可以是硬编码的,也可以从 ​request.files[file] ​对象的​ filename ​属性中获取。
        #但是,建议使用 ​secure_filename()​ 函数获取它的安全版本
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))

        return 'file uploaded successfully'

    else:
        return render_template('upload.html')

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

 

标签:__,username,入门,Flask,app,request,cookie,快速
From: https://www.cnblogs.com/xh2023/p/17402926.html

相关文章

  • Python基础语法入门
    Python基础语法入门1、Python的注释符号1、什么是注释?#学习任何一门代码,先学注释,注释是代码之母注释就是对一段代码的解释说明,它不会参与到代码的运行,只是起到提示作用2、如何注释?2.1、#单行注释#它可以使用快捷键帮助我们把代码写的更加规范快捷键:Ctrl+alt+1(格式......
  • Vue入门浅析
    title:vue入门浅析author:Sun-Winddate:May14,2022写这篇博文的目的在于为初学vue的同学对vue有一些更进一步的了解读这篇博文前,您应该至少安装了vue环境,能在本地运行一个简单的demo本文将浅析vue项目工程的结构,以及用npm运行项目的过程中发生的一些事件注明:该文本应在......
  • 1、基础入门
    一、域名什么是域名?域名在哪里注册?什么是二级域名?以及多级域名?域名发现对于安全的意义?答:(1)域名是由一串用点分割的名字组成的internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。(2)域名注册(3)什么是二级域名?分为国际二级域名和国家二级......
  • 持续熬夜爆肝,炸裂的OPEN AI 快速开发平台后台管理同步上线啦 ,完全免费聊天主题也即将
    持续几天几夜晚,不眠不休的项目开发,终于完成第一版整OPENAI快速开发平台API和大家见面了,这次包含后台管理,用户开发者入住,和完整的接口文档OPENAI快速开发平台这里进入连接上一篇文章爆肝一周,我开源了ChatGPT中文版接口,官方1:1镜像支持全部官方接口目前支持功能普通对......
  • python-flask 技能点使用-03 请求钩子实现审计日志
    场景分析     使用pythonflask开发web系统,该系统是基于用户认证鉴权的web系统,系统中涉及到关键数据的操作,因此需要针对业务操作进行记录(也就是审计日志),便于管理员后期查看,在基于java的Spring系列框架中我们可以借助于AOP面向切面的编程来完成,在使用Flask时可以借助......
  • MATLAB代码: 基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。
    MATLAB代码:基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。该代码基于人工神经网络的数据驱动方法,通过利用基于分段线性化的模型驱动方法的仿真数据,对电-气耦合综合能源系统进行快速经济调度。每个电气总线和气体节点处的负载分布作为输入神经元馈入人工神经网络;最......
  • python-flask 技能点使用-01 请求钩子
    场景分析     熟悉java开发的小伙伴应该了解Spring全生命周期以及配套的一系列方法,熟悉Vue开发的小伙伴们应该也熟悉Vue生命周期管理以及一系列方法,使用过Servlet的小伙伴也应该了解其生命周期的概念,本人之前一直从事java开发,现在因为业务需要需要学习python开发,目前......
  • flask(六)---flask上传文件
    文件上传是很常见的功能,但这过程中却有很多技术环节需要学习文件类型,大小限制多文件上传文件名称安全检查1.文件大小限制出于资源考虑,不能不对用户上传的文件大小进行限制,这个在flask中实现非常简单fromflaskimportFlask,Requestapp=Flask(__name__)app.config[......
  • 快速
    1#include<bits/stdc++.h>2usingnamespacestd;3inta[100000010];4intpart(int*r,intl,inth)//划分函数5{6inti=l;7intj=h;8intpiv=r[l];//基准元素9while(i<j)10{11while(i<j&&r[j]>p......
  • FEniCSx入门——解Poisson方程
    一、Poisson方程 可转换为线性弱形式 其中,u:trialfunction是近似解v:testfunction是Poisson方程两边同乘的函数,用于转换为弱形式。 在Fenics中解PDE时,必须进行下面几个步骤:1、将PDE问题转换成离散变分问题:即寻找u∈V,使得 2、选择V和V_hat空间,换句话说就是......