flask数据库交互,flask前端与后端的数据交互

  flask数据库交互,flask前端与后端的数据交互

  本文主要介绍Flask框架中数据交互的实现。通过示例代码详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

  00-1010 1使用Flask处理表单1.1使用Flask处理一般表单1.2使用Flask-WTF处理表单2使用Flask上传文件3 cookie的使用3.1 cookie的基本概念3.2 cookie的基本使用4会话的使用4.1会话的基本配置4.2会话的基本使用

  

目录

 

  什么是表格?表单是收集用户数据信息的各种表单元素的集合区域。其功能是实现用户和服务器之间的数据交互。通过表单收集客户端输入的数据信息,以及如何提交给网站服务器进行处理(收集和输入/对比和验证等。).表单是Web应用程序中继承最多的部分。Flask-WTF扩展为处理表单提供了很好的支持。

  

1 使用Flask处理表单

 

  Flask request对象包含了客户端发送的所有请求信息,其中request.form可以获取POST请求中提交的表单数据。虽然Flask的request对象为处理Web表单提供了足够的信息,但是有些任务比较单调,需要重复操作。

  indexhtml

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  标题标题/标题

  /头

  身体

  风格

  . div1 {

  height: 180px

  宽度: 380 px;

  border: 1px solid # 8A8989

  margin: 0自动;

  }

  .输入{

  显示:块;

  宽度: 350 px;

  height: 40px

  margin: 10px auto

  }

  .按钮{

  background: # 2066C5

  color:白色;

  font-size : 18px;

  font-weight:粗体;

  height: 50px

  border-radius : 4px;

  }

  /风格

  div class=div1

  {# action:接受的路线#}

  表单操作=/login 方法=post

  type= text class= input name= username placeholder=请输入用户名

  type= password class= input name= pwd placeholder=请输入密码

  Type=“提交”value=“登录”class=“输入按钮”

  /表单

  /div

  /body

  /html

  app.py

  # @time:2020/11/8 16:18

  # Author:Small-J

  从烧瓶导入烧瓶,渲染模板,请求

  app=Flask(__name__)

  @app.route(/)

  def hello_world():

  返回render_template(index5.html )

  @app.route(/login ,methods=[GET , POST])

  定义登录():

  如果请求

  uest.method == GET:

   return 这是get请求

   else:

   return 这是post请求

  if __name__ == __main__:

   app.run(debug=True)

  

  发送post请求成功

  

 

  使用Postman发送Get请求成功

  

 

  在上面的工程中,对表单没有进行必要的保护措施,很容易被人利用,控制用户在当前已登录的Web应用程序上执行非本意的操作。因此,在实际部署服务器上的代码时,不建议使用这个方式处理表单,推荐使用方式进行表单处理。

  

 

  

1.2 使用Flask-WTF处理表单

 

  的安装:pip install flask-wtf

  启动CSRF保护

  Flask-WTF提供了对所有Form表单免受跨站请求伪造(Cross-Site Request Forgery, CSRF)攻击的技术支持(通过添加动态token令牌的方式)

  我们在Flask根目录下新增config.py配置文件,要启动CSRF保护,可以在config.py中定义两个变量

  

# @time:2020/11/8 16:54

 

  form.py

  

# @time:2020/11/8 17:00

 

  app.py

  

# @time:2020/11/8 16:54

 

  login.html

  

<!DOCTYPE html>

 

  

 

  

2 使用Flask上传文件

 

  在Web开发时,经常需要实现文件上传功能。可以以普通方式进行文件的上传,上传过程一般要检查上传的文件格式是否符合要求,文件保存时注意绝对路径和相对路径。

  Flask文件上传比较简单,需要注意以下3点要求:

  

  • 一个标签被标记有,并且在里面包含一个

  • 服务器端应用通过请求对象上的files字典访问文件。

  • 使用文件的save()方法将文件永久地保存在文件系统上的某处。

  • 注意:表单中必须要求,否则上传文件无效。一般可以写成

 

  import osfrom os import path指的是导入os模块及os模块下的path方法。方法下相关属性如下:

  

  • os.path.sep : windows下路径分隔符是反斜杠;

  • os.path.altsep : linux下路径分隔符是/根目录:

  • os.path.curdir当前目录 :

  • os.path.pardir父目录 : os.path.abspath(path)

  • 绝对路径: os.path.join()

 

  注意:什么是文件分隔符?将表格转换为文本时,用分隔符标识文件分隔的位置或将文本转换成表格时,用其标识新行或新列的起始位置。不同操作系统下文件分隔符是不同的,Windows中是"", Linux中是"/"

  

# @time:2020/11/8 21:48

 

  upload.html

  

<!DOCTYPE html>

 

  上传文件

  

 

  

 

  

3 Cookie的使用

 

  Cookie有时也记作Cookies,它现在经常被大家提到,那么到底什么是Cookies?它有什么作用呢?Cookies是一种能够让服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当你再次浏览某网站时,浏览器将存放于本地的用户身份信息递交给服务器,服务器就可以识别用户的身份

  

 

  

3.1 Cookie的基本概念

 

  当用户访问服务器并登录成功后,服务器向客户端返回的一些数据(Cookie),客户端将服务器返回的Cookie数据保存在本地,当用户再次访问服务器时,浏览器自动携带Cookie数据给服务器,服务器便自动访问者的身份信息。

  Cookie基本的语法:

  参数描述name必需项,规定Cookie的名称value必需项,规定Cookie的值expire可选项,规定Cookie的有效期path可选项,规定Cookie在当前Web下哪些目录有效domain可选项,规定Cookie作用的有效域名secure可选项,规定是否通过安全的HTTPS连接来传输Cookie

  

 

  

3.2 Cookie的基本使用

 

  我们在Flask中自定义Cookie,实际上就是在相应Response的Set-Cookie字段中新增加自定义的键值对。而获取Cookie,就是在请求Request中通过键获取对应的值,所以,在工程中必须引入Request和Response模块。

  设置Cookie

  设置Cookie主要有两种方法,一种是通过Response对象设置,另一种是通过直接设置表单头来实现。

  

# @time:2020/11/9 13:20

 

  

 

  

 

  查看Cookie

  查看已经设置好的Cookie,可以通过来得到

  

@app.route(/get_cookie)

 

  删除Cookie

  删除已经设置好的Cookie,可以通过delete_cookie()来完成。delect_cookie括号中对象为被删除的对象名,比如delect_cookie("username")

  

@app.route(/del_cookie)

 

  

 

  

4 Session的使用

 

  Session是基于Cookie实现的,保存在服务器的键值对中。同时,在浏览器的Cookie也对应一个相同的随机字符串,用来再次请求的时验证

  注意:Session是存储在服务器中的,Cookies是储存在浏览器本地中,而Flask的Session是基于Cookies,Session是经过加密保存在Cookies中。

  

 

  

4.1 Session的基本配置

 

  因为Flask的Session是通过加密之后放在了Cookie中。有加密就有密钥用于解密,所以,用到了Flask的Sessio模块就一定要配置SECRET_KEY这个全局宏。一般将SECRET_KEY设置为24位的字符。我们可以自己设定一个随机字符串,例如:

  

app.config[SECRET_KEY] = XXXXXXX

 

  我们也可以引入OS模块中,自动产生一个24位的随机字符串函数。这种方法有个不足之处,就是服务器每次启动之后这个SECRET_KEY的值是不一样的,会造成Session验证失效,用户只有重新登录。

  

 

  

4.2 Session的基本使用

 

  设置Session

  设置Session主要是通过session['name'] = 'value'方法来完成,name代表的是变量名称,value代表的是变量的值

  

# @time:2020/11/9 16:59

 

  

 

  获取Session的值

  获取Session的值有两种方法

  

  • session['name']: 如果内容不存在,将会报异常

  • session.get('name') : 如果内容不存在,将会返回None

 

  

class GetSession(views.View):

 

  删除Session的值或清空Session所有值

  删除单个Session的值,可以使用Session.pop('key')这个方法,如果清除多个Session的值,可以使用Session.clear方法

  

class DelSession(views.View):

 

  

 

  设置Session的过期时间

  如果没有指定Session的过期时间,那么默认就是浏览器关闭后自动结束,即关闭浏览器失效。session.permanent=True在Flask下则可以将有效期延长至一个月。下面的方法可以配置具体多少天的有效期。

  如果设置了Session的permanent属性为True,那么过期时间是31天。

  可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间

  在实际项目开发中可能还有一种需求,就是指定Session的失效时间为3天、7天、10天等整数天数的情况,这里主要用到了一个持续久化的会话生成的时间(实质就是Session会话的有效期)PERMANENT_SESSION_LIFETIME,作为一个datetime.timedelta对象

  

app.config[PERMANENT_SESSION_LIFETIME] = timedelta(days=7)

 

  到此这篇关于Flask框架之数据交互的实现的文章就介绍到这了,更多相关Flask 数据交互内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: