一、获取图片

保存图片

使用图片


二、Flask插件

flask-script是第三方提供的Flask项目交互式插件,可以使用flask-script管理安装项目命令。

安装flask-script

pip install flask-script

使用flask-script插件编写运行项目,实现项目运行和表结构同步

配置pycharm启动

第一种

只能使用runserver,不能使用debug

第二种

配置Flask server,可runserver,也可debug

三、会话

(一)COOKIE

设置COOKIE

获取COOKIE

登录装饰器

def loginVaild(func):@functools.wraps(func)    # 保留原函数名def inner(*args,**kwargs):user_id = request.cookies.get('user_id')email = request.cookies.get('email')if user_id and email:user = User.query.filter_by(email=email,id=user_id).first()if user:return func(*args,**kwargs)else:return redirect('/login/')else:return redirect('/login/')return inner

使用

这其中涉及到了登录装饰器和路由装饰器,两个装饰器的使用。应将登录装饰器放在下面。

还涉及到了,装饰器修饰完函数后,函数名就变为inner了的问题,这样会造成视图重名,出现错误。需要加@functools.wraps(func),保留原函数名。

删除COOKIE

登出

@app.route('/logout/',methods=['get','post'])
def logout():response = redirect('/login/')response.delete_cookie('email')response.delete_cookie('user_id')return response

装饰器

函数名改变问题

def loginouter(func):print('我是登录装饰器')def inner(*args,**kwargs):print('验证')func()return inner@loginouter
def index():print('index')print(index.__name__)结果:
我是登录装饰器
inner
import functoolsdef loginouter(func):print('我是登录装饰器')@functools.wraps(func)def inner(*args,**kwargs):print('验证')func()return inner@loginouter
def index():print('index')print(index.__name__)结果:
我是登录装饰器
index

多层装饰器

import functoolsdef flask_url(func):print('我是flask url装饰器')def inner(*args,**kwargs):print('url')func(*args,**kwargs)return inner
def loginouter(func):print('我是登录装饰器')def inner(*args,**kwargs):print('验证')func()return inner@flask_url    # 2.index = falsk_url(index)
@loginouter    # 1.index = loginouter(index)
def index():print('index')index()结果:
我是登录装饰器
我是flask url装饰器
url
验证
index
def f_outer(func):def inner(*args,**kwargs):return 'i ' + func(*args,**kwargs)return innerdef s_outer(func):def inner(*args,**kwargs):return 'am ' + func(*args,**kwargs)return inner@f_outer
@s_outer
def test():return 'gutianle'print(test())结果:
i am gutianle

(二)SESSION

flask使用session,session默认存在内存当中,需要使用插件才能存储到数据库中。

django的settings中有secretkey,flask中没有,需要配置。

配置

方法一

方法二

设置SESSION


获取SESSION

删除SESSION

方法一

方法二

总结

  • cookie

    • 优点:成本低,能够解决浏览器持续访问的问题,校验速度快
    • 缺点:cookie下发到用户,放在用户本地,安全性低
  • session
    • 优点:解决了cookie安全性的问题
    • 缺点:需要放在服务器上面,django通常放在数据库中,flask放在内存中,成本高

四、flask请求

通常web服务请求:

  • form表单
  • get,post请求
  • ajax
  • 爬虫

django中:

  • request请求对象,视图中的形参
  • request.POST
  • request.GET
  • request.COOKIES
  • request.META
  • request.body

flask中:需要from flask import request导入

  • request.form 获取post请求的参数,从表单请求中获取
  • request.args 从url中获取
  • request.cookies
  • request.files
  • request.method
  • request.url 请求的路由
  • request.headers 请求头

五、完成考勤功能

  • 考勤记录
  • 考勤申请
  • 考勤审核

建模–请假条

  • 请假人的用户名
  • 姓名
  • 请假类型
  • 请假开始时间
  • 请假截止时间
  • 请假描述
  • 联系方式
  • 状态
    • 审核中
    • 通过
    • 驳回
    • 销假
class Leave(BascModel):__tablename__='leave''''审核中 0通过 1驳回 2销假 3'''request_id = db.Column(db.Integer)    # 请假人idrequest_name = db.Column(db.String(32))    # 请假人姓名request_type = db.Column(db.String(32))    # 请假类型request_start = db.Column(db.DATETIME)    # 请假开始时间request_end = db.Column(db.DATETIME)    # 请假结束时间request_description = db.Column(db.TEXT)    # 请假描述request_phone = db.Column(db.String(11))    # 联系方式request_status = db.Column(db.Integer)    # 请假状态

视图

@app.route('/leave_list/',methods=['get','post'])
@loginVaild
def leave_list():user = User.query.get(request.cookies.get('user_id'))if request.method == 'POST':flag = 1data = request.formfor one in data.keys():if not data[one]:flag = 0if flag:leave = LeaveList()leave.request_id = request.cookies.get('user_id')leave.request_name = user.nameleave.request_type = data.get('type')leave.request_start = data.get('start')leave.request_end = data.get('end')leave.request_description = data.get('dec')leave.request_phone = data.get('phone')leave.request_status = 0leave.save()return redirect('/leave_all_list/')else:error = '表中项目均不可为空'return render_template('leave_list.html',**locals())@app.route('/leave_all_list/',methods=['get','post'])
@loginVaild
def leave_all_list():user = User.query.get(request.cookies.get('user_id'))leave = LeaveList.query.all()return render_template('leave_all_list.html',**locals())

模板

leave_list.html

{% extends 'base.html' %}
{% block title %}请假条
{% endblock %}
{% block style %}<style>th {text-align: center;}</style>
{% endblock %}
{% block content %}<form action="" method="post"><table class="table table-bordered"><tr><th colspan="4" style="text-align: center"><h1>请假条</h1></th></tr><tr><th>请假人姓名</th><td><input type="text" name="username" value="{{ user.name }}" disabled class="form-control form-control-user"></td><th>请假类型</th><td><select name="type" class="form-control form-control-user"><option value="事假" selected>事假</option><option value="病假">病假</option><option value="婚假">婚假</option><option value="产假">产假</option><option value="缺勤">缺勤</option><option value="加班">加班</option><option value="出差">出差</option><option value="调休">调休</option><option value="其他">其他</option></select></td></tr><tr><th>开始时间</th><td><input type="date" name="start" class="form-control form-control-user"></td><th>结束时间</th><td><input type="date" name="end" class="form-control form-control-user"></td></tr><tr><th>联系方式</th><td><input type="text" name="phone" placeholder="请预留电话号码" class="form-control form-control-user"></td><th>请假天数</th><td><input type="number" name="days" class="form-control form-control-user"></td></tr><tr><th>请假描述</th><td colspan="3"><textarea name="dec" cols="85" class="form-control form-control-user"></textarea></td></tr><tr><td colspan="4" style="text-align: center"><input type="submit" value="提交" class="btn btn-primary"></td></tr></table></form><p style="color: red">{{ error }}</p>
{% endblock %}

leave_all_list.html

{% extends 'base.html' %}{% block label %}请假记录{% if user.name %}<a class="btn btn-warning" href="/leave_list/" style="float: right;margin-right: 5%;">请假</a>{% else %}<button class="btn btn-warning" disabled style="float: right;margin-right: 5%;">请假</button><p style="color: red;font-size: 16px">请先完善用户姓名,再使用请假功能</p>{% endif %}
{% endblock %}{% block title %}请假记录
{% endblock %}{% block content %}<table class="table table-bordered"><tr><th>假条编号</th><th>请假人</th><th>开始时间</th><th>结束时间</th><th>状态</th><th>操作</th></tr>{% for one in leave %}<tr><td>{{ one.id }}</td><td>{{ one.request_name }}</td><td>{{ one.request_start }}</td><td>{{ one.request_end }}</td>{% if one.request_status == 0 %}<td>审核中</td>{% elif one.request_status == 1 %}<td>通过</td>{% elif one.request_status == 2 %}<td>驳回</td>{% elif one.request_status == 3 %}<td>销假</td>{% endif %}<td><button class="btn btn-primary">审核</button></td></tr>{% endfor %}</table>
{% endblock %}

Flask框架(三)--获取图片,flask-script(runserver,migrate),会话,请求,考勤功能相关推荐

  1. python flask框架是什么_Python Flask框架详解

    原博文 2020-04-08 23:33 − 记录请求使用的HTTP方法 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现,比如可以用 Flask 扩展加入O ...

  2. python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)...

    参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...

  3. 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步

    Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...

  4. 147. Python语言 的 Flask框架项目前导 之 Flask数据库 第三章 :SQLAlchemy-ORM 介绍

    SQLAlchemy-ORM 介绍 本章主题 关键词 ORM介绍 使⽤SQLAlchemy 总结小便条 本章主题    关键词    ORM介绍   随着项⽬越来越⼤,采⽤ 原⽣SQL 的⽅式在代码中 ...

  5. flask ajax 上传 图片,flask jQuery ajax 上传文件

    1.html 代码 注:1.html 部分主要是一个form表单,其中表单的enctype = "multipart/form-data" 必须要有. 2.由于我的页面背景颜色设置 ...

  6. 【Flask框架】——第一个Flask项目

    文章目录 第一个Flask项目 1.安装环境 2.创建项目 3.启动程序 4.访问项目 5.参数说明 6.应用程序配置参数 1.从配置对象中加载 2.从配置文件中加载 3.从环境变量中加载 4.从Py ...

  7. python之flask框架详解

    目录 前言 1.新建文件helloworld.py 2.相关配置参数 3.加载配置文件 3.1配置对象加载 3.2配置文件加载 3.3读取配置 4 路由定义 4.1指定路由地址 4.2 给路由传参 4 ...

  8. Flask框架学习整理——从零开始入门Flask

    文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...

  9. Flask框架项目实例:**租房网站(二)

    Flask是一款MVC框架,主要是从模型.视图.模板三个方面对Flask框架有一个全面的认识, 通过完成作者-读书功能,先来熟悉Flask框架的完整使用步骤. 操作步骤为: 1.创建项目 2.配置数据 ...

  10. Flask框架项目实例:**租房网站(一)

    Flask是一款MVC框架,主要是从模型.视图.模板三个方面对Flask框架有一个全面的认识, 通过完成作者-读书功能,先来熟悉Flask框架的完整使用步骤. 操作步骤为: 1.创建项目 2.配置数据 ...

最新文章

  1. [Unity WWW] 跨域访问解决方法
  2. .NET简谈脚本引擎系列(一:认识脚本引擎)
  3. DataReader 要在事务提交前 CLOSE 掉 否则会报一个:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。...
  4. 实现延时任务的 4 种实现方案!
  5. tomcat学习笔记——lifecycle(容器)启动都干了什么
  6. range函数python_range()函数以及Python中的示例
  7. 解析OpenShift的存储规划
  8. 手把手教你用Python实现“坦克大战”,附详细代码!
  9. Java知多少(50)Java throws子句
  10. C++ Primer Plus学习(十四)——友元、异常和其他
  11. ubuntu 搭建 php 环境
  12. ext3日志模式---文件系统
  13. [SQLite]www.sqlite.org官网.NET最新版本所有内容下载
  14. excel表自动向下填充
  15. bzoj5064 B-number 数位dp
  16. strick-footer 粘边布局
  17. 永远的疯狂竹子----纪念退役不久的V-Gundam
  18. think in java学习笔记
  19. Python开发培训怎么样?
  20. Mac配置Sublime Text全部以标签页打开

热门文章

  1. U盘插入有盘符无容量
  2. 穿越派+PotPlayer=私有云盘(在线分享播放电影和音乐)
  3. 我的世界服务器的文件所以权利,我的世界指令大全_我的世界(minecraft)服务器指令汇总_快吧单机游戏...
  4. python+monkey+ 监控 crash,性能统计
  5. height transition
  6. 结构体熟练掌握--实现通讯录
  7. ETO的公开赛T1《矿脉开采》题解(正解)(by Zenurik)
  8. Word2Vec之CBOW详解
  9. java调用ocx控件获取数据_Java调用ocx控件以及dll
  10. Linux下压缩某个文件夹命令