概述
写在前面:
更详细的可以移步https://blog.csdn.net/u014793102/article/details/80372815
一、框架的轻重
重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django
轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、
二、 明确Web开发的任务
视图开发:根据客户端请求实现业务逻辑(视图)编写
模板、数据库等其他的都是为了帮助视图开发,不是必备的
三、认识flask
3.1简介
Flask诞生于2010年,是Armin
ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其
WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。
可以说Flask框架的核心就是Werkzeug和Jinja2。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
3.2 与Django对比
django提供了:
django-admin快速创建项目工程目录
manage.py 管理项目工程
orm模型(数据库抽象层)
admin后台管理站点
…
而这些,flask都没有,都需要扩展包来提供
3.3 flask扩展包:
种类多多:
Flask-SQLalchemy:操作数据库;
Flask-migrate:管理迁移数据库;
Flask-Mail:邮件;
Flask-WTF:表单;
Flask-script:插入脚本;
Flask-Login:认证用户状态;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;
四、flask的使用
可以选择使用虚拟环境,然后下载以下模块
快捷方法,将下面的模块名保存在txt文件中,然后命令窗口中
python –m pip install -r xxx.txt
alembic==0.9.4
amqp==2.2.2
billiard==3.5.0.3
celery==4.1.0
certifi==2017.7.27.1
chardet==3.0.4
Flask==0.10.1
Flask-Migrate==2.1.0
Flask-Script==2.0.5
Flask-Session==0.3.1
Flask-SQLAlchemy==2.2
Flask-WTF==0.14.2
idna==2.5
itsdangerous==0.24
Jinja2==2.9.6
kombu==4.1.0
Mako==1.0.7
MarkupSafe==1.0
MySQL-python==1.2.5
olefile==0.44
Pillow==4.2.1
pycryptodome==3.4.7
python-alipay-sdk==1.4.0
python-dateutil==2.6.1
python-editor==1.0.3
pytz==2017.3
qiniu==7.1.4
redis==2.10.5
requests==2.18.3
six==1.10.0
SQLAlchemy==1.1.12
urllib3==1.22
vine==1.1.4
Werkzeug==0.12.2
WTForms==2.1
4.1 Flask的Hello world程序
Flask框架中没有Django那么多的文件,刚开始使用flask框架时,只有简单的一个py文件,里面的其他所有内容,都需要自己定义与配置,包括静态目录static与templates目录还有settings文件中的所有内容。
_name_ | 如果在当前脚本下运行,就是__main__,如果当前脚本当做模块运行,它就是模块的名称 |
---|---|
传入的参数__name__ | 表示以当前的脚本所在的目录为根目录,后面使用的static与templates目录,都是以demo_hello.py文件所在的目录为根目录。 |
路由 | 路由设置了之后,在访问时不会补全,要手动补全 |
4.2 Flask创建app对象
4.2.1 初始化参数
import_name:
static_url_path:
static_folder: 默认‘static’
template_folder: 默认‘templates’
static_folder | 修改默认静态目录名称 |
---|---|
static_url_path | 用于改变URL访问静态资源的路径,默认URL是static,默认访问static目录注意缓存 |
template_folder | 模板文件目录,默认是templates |
from flask import Flask
app = Flask(
__name__,
static_folder = 'static',
static_url_path = 'cheng',
template_folder = 'templates',
)
@app.route('index')
def index():
return '<p>hello</p>'
if __name__ == '__main__':
app.run()
4.2.2 配置参数
app.config.from_pyfile(“yourconfig.cfg”) 或
app.config.from_object()
另外:
flask默认debug调试模式等于False,如果想要让flask提示错误信息,可以手动配置使debug=True,在Django的setting文件中,默认了debug=True有下面几种方法可以实现
# 第一种方式,通过配置文件设置参数,让app加载配置文件
app.config.from_pyfile('config.txt')
#第二种方式,通过对象的方式,开启debug调试模式
class Config(object):
DEBUG=True
app.config.from_object(Config)
#第三种方式,通过字典的方式
app.config['DEBUG']=True
#第四种方式:app.run()中加入 debug=True-->app.run(debug=True)
if __name__ == '__main__':
app.run(debug=True)
4.2.3 在视图读取配置参数
app.config.get() 或者 current_app.config.get()
4.2.4 设置app.run的参数
app.run(host=”0.0.0.0”, port=5000)
4.3 路由
4.3.1 app.url_map 查看所有路由
4.3.2 利用methods限制访问方式
@app.route(’/sample’, methods=[‘GET’, ‘POST’])
4.3.3 同一路由装饰多个视图函数
使用访问方式进行区分
4.3.4 同一视图多个路由装饰器
4.3.5 使用url_for进行反解析
4.3.5 动态路由
获取路由中传递的参数,路由传递的参数默认当做string处理
整型:
Path 类型可以让参数中携带斜线
4.4 获取请求参数
from flask import request
就是 Flask 中表示当前请求的 request
对象,request对象中保存了一次HTTP请求的一切信息。
args get请求时,记录请求中的所有的参数,返回一个类字典格式数据类型。
form post 请求时, 记录请求中的所有的参数,返回一个类字典格式数据类型。
4.4.1 上传文件
已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的 files
属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Python
file 对象,但它还有一个 save()
方法,这个方法允许你把文件保存到服务器的文件系统上。这里是一个用它保存文件的例子:
from flask import Flask,render_template,request
app = Flask(__name__)
@app.route('/upload/',methods=['post','get'])
def upload():
if request.method == 'POST':
file_obj = request.files.get('pic')
print(file_obj)
path = 'static/'+file_obj.filename
# 保存图片第一种方式
# with open(path,mode='wb')as f:
# f.write(file_obj.read())
# 保存图片第二种方式
file_obj.save(path)
return 'yep'
return render_template('upload.html')
if __name__ == '__main__':
app.run()
如果你想知道上传前文件在客户端的文件名是什么,你可以访问 filename 属性。
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file_obj = request.files.get('pic') # 返回一个file对象
# 获取文件名称
name = file_obj.filename
print(name)
file_obj.save('static/{}'.format(name))
return '上传成功'
return render_template('upload.html')
if __name__ == '__main__':
app.run(debug=True)
4.5 abort函数与自定义异常处理
4.5.1 abort函数
如果在视图函数执行过程中,出现了异常错误,我们可以使用abort函数立即终止视图函数的执行。通过abort函数,可以向前端返回一个http标准中存在的错误状态码,表示出现的错误信息。
使用abort抛出一个http标准中不存在的自定义的状态码,没有实际意义。如果abort函数被触发,其后面的语句将不会执行。其类似于python中raise。
from flask import abort
也可以向页面返回信息
4.5.2 自定义异常处理
@app.errorhandler(404)
def error(e):
return '您请求的页面不存在了,请确认后再次访问!%s'%e
最后
以上就是淡定酸奶为你收集整理的flask笔记--01一、框架的轻重二、 明确Web开发的任务三、认识flask四、flask的使用的全部内容,希望文章能够帮你解决flask笔记--01一、框架的轻重二、 明确Web开发的任务三、认识flask四、flask的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复