概述
一、获取图片
保存图片
使用图片
二、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 functools
def loginouter(func):
print('我是登录装饰器')
@functools.wraps(func)
def inner(*args,**kwargs):
print('验证')
func()
return inner
@loginouter
def index():
print('index')
print(index.__name__)
结果:
我是登录装饰器
index
多层装饰器
import functools
def 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 inner
def 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) # 请假人id
request_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 = 1
data = request.form
for one in data.keys():
if not data[one]:
flag = 0
if flag:
leave = LeaveList()
leave.request_id = request.cookies.get('user_id')
leave.request_name = user.name
leave.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 = 0
leave.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),会话,请求,考勤功能一、获取图片二、Flask插件三、会话四、flask请求五、完成考勤功能的全部内容,希望文章能够帮你解决Flask框架(三)--获取图片,flask-script(runserver,migrate),会话,请求,考勤功能一、获取图片二、Flask插件三、会话四、flask请求五、完成考勤功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复