flask笔记--01

写在前面:
更详细的可以移步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

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值