此处将为大家介绍关于如何在Python和Flask中打印字符串上方的第一个日期条目?的详细内容,并且为您解答有关python打印字符串第一个字符的相关问题,此外,我们还将为您介绍关于16、Flask实
此处将为大家介绍关于如何在 Python 和 Flask 中打印字符串上方的第一个日期条目?的详细内容,并且为您解答有关python打印字符串第一个字符的相关问题,此外,我们还将为您介绍关于16、Flask 实战第 16 天:Flask 文件上传、Flask 中使用 Flask-SQLAlchemy 查询数据库在数据库内容更新时无法实时返回、Flask 入门 flask-script 蓝本 钩子函数 (三)、Flask 入门一( flask 框架和 flask-script 库)的有用信息。
本文目录一览:- 如何在 Python 和 Flask 中打印字符串上方的第一个日期条目?(python打印字符串第一个字符)
- 16、Flask 实战第 16 天:Flask 文件上传
- Flask 中使用 Flask-SQLAlchemy 查询数据库在数据库内容更新时无法实时返回
- Flask 入门 flask-script 蓝本 钩子函数 (三)
- Flask 入门一( flask 框架和 flask-script 库)
如何在 Python 和 Flask 中打印字符串上方的第一个日期条目?(python打印字符串第一个字符)
如何解决如何在 Python 和 Flask 中打印字符串上方的第一个日期条目?
我在一个文本文件中有一个列表,如下所示:
2019-11-11 13:44:58.879616
ADDED ON THURSDAY NIGHT
185.236.11.8
195.54.161.122
167.86.99.201
147.135.222.214
2019-11-12 13:44:58.879616
ADDED ON FRIDAY NIGHT
185.236.11.8
195.54.161.122
167.86.99.201
147.135.222.214
列表只是添加 IP 的日期、描述和 IP 列表。此列表不断从另一个来源追加。我想使用 python 在此文本文件中搜索特定 IP(例如 167.86.99.201),然后读取第一个日期条目和上面的描述,以及使用该 IP 添加到变量的 IP 列表,以便我可以使用它在 HTML 输出中与 Flask 一起使用。
解决方法
我会做这样的事情 - 假设您的文本文件没有以任何方式编码。可以检测哪些行是日期,哪些是ip地址,并制作一个易于搜索的字典。
import re
from dateutil import parser
ipAddress = "192.168.1.255"
#first build a dictionary which you can easily search
ipChk = re.compile(r''^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'')
searchSet = {}
for each in open("file.txt","r"):
try:
date = parser(each)
pDate = date.strftime("%m/%d/%Y")
searchSet[pDate] = []
except:
if ipChk.match(each):
searchSet[pDate].append(each)
for k,v in searchSet.items()
if ipAddress in v:
print("Date: %s,IP: %s" % (k,v))
如果您的文本文件非常大,您可以执行相反的操作(将您的 IP 地址作为键值并使用一组日期作为值)以便于搜索。您需要添加额外的一行,以免覆盖每个条目的 IP 字典键。
16、Flask 实战第 16 天:Flask 文件上传
上传文件
这里以图片来演示 flask 如何上传文件
首先来写个简单的前端页面 upload.html, 在里面写个文件上传的表单
后端 debug 断点调试
获取到文件后,当然,我们需要把文件保存下来。在项目下新建一个目录 media 用来保存上传的文件
flask 还给我们提供了一个检测文件名字的函数,建议使用,提高安全性
访问上传的文件
从服务器上读取文件,应该定义一个 url 与视图函数,来获取指定的文件。在这个视图函数中使用 send_from_directory (文件的目录,文件名) 来获取
...
from flask import send_from_directory
@app.route(''/images/<filename>/'')
def get_image(filename):
return send_from_directory(UPLOAD_PATH, filename)
对上传的文件使用表单验证
比如针对上传的头像,我们只允许 jpg,png,gif 格式通过, 在 froms.py 中写一个表单认证
Flask 中使用 Flask-SQLAlchemy 查询数据库在数据库内容更新时无法实时返回
Flask 中使用 Flask-SQLAlchemy 查询数据库在数据库内容更新时无法实时返回 Flask-SQLAlchemy 版本 :2.3.2
"""python
from flask.ext.sqlalchemy import SQLAlchemy
class UnlockedAlchemy(SQLAlchemy):
def apply_driver_hacks(self, app, info, options):
if "isolation_level" not in options:
options["isolation_level"] = "READ COMMITTED"
return super(UnlockedAlchemy, self).apply_driver_hacks(app, info, options)
# db = SQLAlchemy() # 源码中options没有isolation_level设置项, 弃用
db = UnlockedAlchemy()
"""
Flask 入门 flask-script 蓝本 钩子函数 (三)
###1 flask-script 扩展库
概念: 是一个 flask 终端运行的解析器,因为项目完成以后,代码改动会有风险,所以借助终端完成不同启动项的配置
安装
pip3 install flask-script
使用
from flask_script import Manager #导入
manager = Manager(app) #初始化flask运行的解析器
manager.run() #运行
执行程序需要在启动项输入命令
python3 当前启动文件名.py runserver 可选参数
可选参数如下:
-h 主机名
-p 端口号
--threaded 开启多线程
-d 开启调试模式
-r 代码修改后重新加载
例如:
python3 manage.py runserver -d -r -h127.0.0.1 -p5001 --threaded 参数全部加上
2 Blueprint 蓝图
** 概念 **: Blueprint 通过把实现不同功能的 module 分开,实现分类功能,从而把一个大的 application 分割成各自实现不同功能的 module。在一个 Blueprint 中可以调用另一个 blueprint 的 view function, 但要加相应的 blueprint 名。本质上来说就是让程序更加松耦合,更加灵活,增加复用性,提高查错效率.
导入
from flask import Blueprint,session
使用 : 创建蓝图路由文件 userinfo.py 文件
from flask import Blueprint
user = Blueprint(''user'',__name__)
@user.route(''/login'')
def login():
return ''login''
注意 : 1 Blueprint接受两个参数实例化,分别文蓝本名与蓝本所在的包与模块
2 蓝本实质上也是一个命名空间
在启动文件中注册蓝本: app/__init__.py
, 一般在初始化时候注册蓝图
from mysession import user
app.register_blueprint(user) #app注册蓝本user
app.register_blueprint(user,url_prefix=''/user'') #在app中注册蓝本user,并添上前缀/user
下面我们以一个具体例子说明:假定一个文件系统
--app
--main
__init__.py
errors.py
forms.py
views.py
__init__.py
其中mian就是蓝本模块,错误信息保存在errors.py,视图函数保存在views.py文件中
(1) 创建蓝本:
在文件 app/main/__init__.py
添加定义:
from flask import Blueprint
main = Blueprint(''admin'',__name__)
from . import views,errors
注:1 通过实例化Blueprint类的对象创建一个蓝本
2 视图与errors的导入应放在蓝本创建之后,防止循环导入问题
在文件 app/main/views.py
中添加视图函数:
from . import main #当前目录下导入蓝本
from flask import render_template
@main.route(''/test/'')
def test():
return render_template(''main/test.html''),200
注: 1 跳转到模板页面test.html
在文件 app/main/errors.py
中添加错误视图函数:
from flask import render_template
from app.main import main #导入蓝本
#捕捉404状态码
@main.app_errorhander(404)
def page_not_found(e):
return render_tamplate(''main/404.html''),404
#捕捉500状态码
@main.app_errorhander(500)
def internal_server_error(e):
return render_template(''main/500.html''),500
(2) 注册蓝本
在 app/__init__.py
中添加注册蓝本代码
from app.main import main #导入蓝本
app.register_blueprint(main,url_prefix=''/admin'')
(3) 构造 url 路由
在view视图中有函数test
url_for(''main.test'') url_for(''蓝本名.视图函数名'')
3 钩子函数
类似于 django 中间件 在使用的时候需要使用装饰器,使得 程序变成 A函数--->钩子函数---->B函数
,
flask 项目中有个是应用上下文 (app), 一个是请求上下文 (request), 请求上下文 request 和应用上下文 current_app 都是一个全局变量。所有请求都共享的。Flask 有特殊的机制可以保证每次请求的数据都是隔离的,即 A 请求所产生的数据不会影响到 B 请求。所以可以直接导入 request 对象,不会受到外界影响
两个上下文一般包含 4 个属性:
- request : 请求上下文的对象,一般用来保存一些请求的变量。比如 method、args、form 等。
- session: 请求上下文的对象,一般用来保存一些会话信息.
- current_app: 返回当前 App
- g: 全局变量,应用上下文的对象,处理请求时作为临时存储的对象 : g.message 存储信息
钩子函数 | 功能描述 |
---|---|
before_first_request | 第一次请求之前 |
before_request | 每次请求之前 |
after_request | 每次请求之后 |
teardown_request | 不管是否异常都会在请求之后执行 |
context_processor | 上下文处理器,返回字典的健 |
errorhandler | errorhandler 接收状态码,可以自定义返回状态码的响应页面 |
注:在蓝本中使用钩子函数需要进行转化: @mysession.teardown_app_request 蓝本名.teardown_app_request
4 g 对象
g : 全局变量,需要导入使用 from flask import g
- g 对象专门用来保存用户数据的
- g 对象在一次请求中所有代码都是公用的
例如:在提交表单中测试下 action=''{{ url_for(''login'') }}'' method=''post''
login_user.html
<form action="{{ url_for(''login'') }}" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" placeholder="请输入用户名" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" placeholder="请输入密码" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
视图函数 utils.py 中
from flask import g
def login_username():
return u''当前登录用户:{}''.format(g.username)
def login_password():
return u''当前密码:{}''.format(g.password)
在主文件视图函数中 views.py
from flask import Flask,g,request,render_template
from utils import login_username
app = Flask(__name__)
@app.route(''/login/'',methods=[''GET'', ''POST''])
def login():
if request.method == ''GET'':
return render_template(''login.html'')
else:
username = request.form.get(''username'')
password = request.form.get(''password'')
g.username = username #将username变成全局g对象信息存储
g.password = password #将password变成全局g对象信息存储
login_username()
login_password()
return u''登录成功!''
if __name__ == ''__main__'':
app.run()
Flask 入门一( flask 框架和 flask-script 库)
今天小婷儿给大家分享的是Flask 入门一( flask 框架和 flask-script 库)。
Flask 入门一( flask 框架 和 flask-script 库)
一、Flask框架:
1、简介
Flask是一个非常小的Python Web框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。
2、组成
1)Wsgi系统、调试、路由
2)模板引擎(Jinja2,是Flask核心开发者人员开发的)
3)安装:pip install flask
4)视图函数使用说明
a: 路由末尾的'/'建议都加上,防止手误多敲路由末尾'/'引起的路由错误;
b: 若需要指定参数,参数写在<>中,视图函数中需要对应的同名的参数;
c: 若需要指定参数类型,如:int/float/path,类型写在参数之前,使用 ':' 与参数分割;
d: 若不指定参数类型,参数默认是str类型,path其实也是str类型,只是'/'作为普通字符处理而已;
5)完整代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello Flask !'
if __name__ == '__main__':
app.run()
5) 终端启动:
app.run(debug=True, threaded=True, host='0.0.0.0', port=5050)
6)启动参数说明
Debug:是否开启调试模式,默认为False;开启后有调试信息,会自动加载文件;
Threaded:是否开启多线程,默认是关闭的;
Host:默认为127.0.0.1,设置为'0.0.0.0'之后可以通过IP进行访问,设置端口,默认为5000
二、flask-script库
1、简介
简单来说,就是一个flask终端启动参数解析工具;这样我们就可以不更改代码完成不同方式的启动。
2、使用
1)导入类库:from flask_script import Manager
2)创建对象:manager = Manager(app)
3)启动代码:if __name__ == '__main__':
manager.run()
4)终端启动:python manage.py runserver -d -r -h 0.0.0.0 -p 5000
3、启动参数说明
1)-h, --host 指定主机
2)-p, --port 指定端口
3)-d 开启调试模式
4)-r 代码修改后自动加载
5)-?, --help 查看帮助信息
关于如何在 Python 和 Flask 中打印字符串上方的第一个日期条目?和python打印字符串第一个字符的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于16、Flask 实战第 16 天:Flask 文件上传、Flask 中使用 Flask-SQLAlchemy 查询数据库在数据库内容更新时无法实时返回、Flask 入门 flask-script 蓝本 钩子函数 (三)、Flask 入门一( flask 框架和 flask-script 库)的相关信息,请在本站寻找。
本文标签: