flask数据交互(一)

简介
本博文主要的知识点

  • 表单处理以及flask-wtf的使用
  • 上传文件的验证、重命名、保存等方法
  • flask下cookie技术的基本使用
  • session的初始化和基本使用

表单是用户收集信息的各种表单元素的集合区域,他的作用是实现用户和服务器的数据交互。form表单是web应用中最基本的一部分,为了能处理form表单,flask-wif拓展模块提供来了良好的支持。
使用flask处理通用表单

app.py
from flask import Flask,render_template,request #导入相应的模块
app=Flask(__name__)#flask初始化
@app.route('/')#定义路由表
def hello_world():#定义视图函数
    return render_template('index.html') 
@app.route('/login',methods=['GET','POST'])
def login():
    if request.method='GET':
       return '这是get请求'
    else:
        return '这是post请求'
if __name__=='__main__':
    app.run(debug=True)

使用flask文件上传
使用flask上传文件时需要注意一下三点

  • 一个
    标签被标记enctype=multipart/form-data,并且里面包含一个标签
  • 服务端应用通过请求对象上的files字典访问文件
  • 使用文件的save()方法将文件永久的保存在系统的某处。
from flask import Flask,render_template,request
import os
from os import path
path路径下的相关属性
* os.path.sep:在window下的分割符是"\"
* os.path.altsep:linux下的路径分隔符是"/"
* os.path.curdir:更目录
* os.path.pardir:当前目录
* os.path.abspath(path):父目录
* os.path.join():绝对路径

注意:在不同的操作系统下不同的文件分隔符是不相同的

from werkzeug.utils import serure_filename
....
 @app.route('/',methods=['POST','GET'])
def hello_world():
    if request.method=='GET':
        return render_template('upload.php')
    else:
        f=request.file['file'] #获取文件流
        filename=secure_filename(f.filename) #去掉其中的文件名
        f.save(path.jion(static/uploads,filename)) #使用save方法来保存文件
        return '文件上传成功'
  ......

html元素介绍:

.input  <!--定义容器input-->
backgroup <!--定义背景颜色-->
color <!--字体的颜色-->
font-size <!--字体大小-->
font-weight <!--字体加粗-->
border-radius <!--所有的角都使用-->
form <!--表单-->
action <!--动作-->
method <!--方法-->
class <!--类属性-->
input <!--按钮-->

改进文件上传功能
改进1

.......
if platfrom.system()=='windows':
  slash='\\'
else:
  platform.system()=='linux':
  slash='/'
upload_path=os.path.curchir + slash+"uploads" +slash

改进2
.......

@app.route('/',methods=['POST','GET'])
def hello_world():
  if request.method=='GET':
    return render_template('upload.html')
  else:
    if not os.path.exists(upload_path)
      os.makedirs(upload_path)
    form=uploadform(combinedMultiDict{[request.form,request.files]}) #表单验证
    if form.validate():
      f=request.filename['file'] #获取文件流
      filename=secure_filename(f,filename) #获取文件名称
      exit=filename.rsplit('.',1)[1]#获取文件的后缀名
      unix_time=int(time.time) #获取文件的时间
      new_filename=str(unix_time)+'.'+exit #对文件进行重命名
      file_url=upload_path+new_file
      f.save(path.join(upload_path,new_filename))#文件保存
      return
    else:
     return "只支持文件jpg等图片文件上传"

cookie的使用
设置cookie主要的俩种方式,一种是通过response设置对象设置,另一种是直接通过设置表单头实现。
(1)通过response对象设置

def set_cookie(): #定义视图函数
    resp=request('设置cookie!')
    resp.set_cookie('username','zhangsan') #传入cookie
    return resp 

(2)通过设置表单来实现

def set_cookie():#先创建响应的对象
    resp=respone('设置cookie')
    #设置cookie的usename
    resp.header['set-cookie']="username=zhangsan;" Expires=SUN,-Nov-2020 05:10:02 GMT;Max—Age=3600;path='/'
    return resp #返回响应的response

查看cookie
可以通过request.cookies.get来得到
删除cookie
可以通过delete_cookie()来完成
设置cookie的作用域
cookie默认只能在主域名上使用,如果想要在子域名中使用cookie。

  • 首先要创建一个子域名
  • 定义蓝图
    bp=Blueprint("admin_bp",__name__,subdomin="admin")
  • 把蓝图定义到app.py 文件之中
from bule_admin import bp
app.register_blueprint
  • 注册服务器的域名
    app.config['SERVER_NAME']='baidu.com:5000'

posted on 2022-03-06 11:00  寂寞梧桐#  阅读(124)  评论(0编辑  收藏  举报

导航