Flask入门学习一之框架介绍

Flask的设计模式:MVC模式/MTV模式

MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化界面结构中。
  	核心思想:解耦, 低耦合高内聚
  	优点:降低各个模块之间的耦合性,方便变更,更容易重构代码,最大程度实现了代码的重用。

MVC(Model,View,Controller)
    Model:用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑部分,Model通常只提供功能性的接口,通过这些接口可以获取Model的所有功能。
    View:负责数据的显示和呈现,View是对用户的直接输出。
    Controller:负责从用户端收集用户的输入,可以看成提供View的反向功能,主要处理用户交互。

MVT模式简介
    本质上与MVC没什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。
    Model:负责业务对象与数据库(ORM)的对象, models.py: 数据
    View:负责业务逻辑,并在适当的时候调用Model和Template, views.py:控制器
    Template:负责把页面展示给用户, html:界面
url:路由, urls.py

使用Flask

创建项目
创建虚拟环境
	mkvirtualenv flaskenv

在虚拟环境中安装flask
	pip install flask
    
创建helloFlask.py文件,并写入以下代码:
    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def hello():
        return 'Hello Flask'

    if __name__ == '__main__':
        app.run()

run()启动的时候还可以添加参数:
    debug 是否开启调试模式,开启后修改过python代码会自动重启
    port 启动指定服务器的端口号
    host 主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip
    use_reloader 自动重启服务器
flask-script插件使用
flask-script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本及其他运行在web应用之外的命令行任务;使得脚本和系统分开;
1.安装
	pip install flask-script

2.初始化
	manager = Manager(app)

3.调用
	在run的地方修改,修改manager.run()

4.可以在命令行中使用: python manage.py runserver
  还可以接收参数: python manage.py runserver -p 8000 -h 0 -d -r
	p  端口 port
	h  主机 host
	d  调试模式  debug
	r  重启(重新加载) reload(restart)
    
代码结构
static 静态资源文件
templates 模板文件
默认两个都可以直接使用, 直接使用相对路径就好

模板渲染
  render_template()

  其实也是分为两个过程,加载和渲染
    template = Template(<h2>呵呵</h2>)
    template.render()

静态使用,相当于反向解析
  url_for(’static’,filename=‘hello.css’)
    
项目拆分

代码全都写在manage.py一个文件中是不现实的, 我们可以对项目进行简单的拆分

将原来的app.py文件重命名为:manage.py

from flask_script import Manager
from App import create_app

# 创建app
app = create_app()

# 创建manager对象
manager = Manager(app)

if __name__ == '__main__':    
	manager.run()

新建目录App, 并在App的init文件中创建app对象

from flask import Flask

# 创建app
def create_app():
	app = Flask(__name__)       
	return app

蓝图blueprint
1,宏伟蓝图(宏观规划) 
2,蓝图也是一种规划,主要用来规划urls(路由)
3,蓝图基本使用
  安装
	pip install flask-blueprint
    
  在views.py中初始化蓝图
	blue = Blueprint('first', __name__)
    
  在init文件中调用蓝图进行路由注册
    app.register_blueprint(blueprint=blue)
    
route路由

路由通过装饰器对应视图函数,并且可以接收参数,所以我们只需要在视图函数上使用装饰器即可

语法
  @app.route(/rule/)
  def hello():
      return ‘Hello World!’  
      
  @app.route(/rule/<id>/)
  def hello(id):
      return ‘Hello%s’ % id

写法
	<converter:variable_name>
converter类型
	string 	接收任何没有斜杠(‘/’)的名称(默认)
	int	接收整型
	float	接收浮点型
	path	接收路径,可接收斜线(’/’)
	uuid	只接受uuid字符串,唯一码,一种生成规则
	any	可以同时指定多种路径,进行限定
     	
请求方法
	默认支持GET,HEAD,OPTIONS, 如果想支持某一请求方式,需要自己手动指定
	@app.route(/rule/,methods=[‘GET’,’POST’])
	def hello():
		return ‘LOL’
    
methods中指定请求方法
	GET
	POST
	HEAD 
	PUT
	DELETE
    
url_for
	反向解析,根据函数名字,获取反向路径
    url_for("蓝图名.函数名")
	url_for(‘蓝图名.函数名’,参数名=value)

Request
服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改

属性
  url  完整请求地址
  base_url  去掉GET参数的URL
  host_url  只有主机和端口号的URL
  path  路由中的路径
  method  请求方法
  remote_addr  请求的客户端地址  
  args  GET请求参数 
  form  POST请求参数
  files  文件上传 
  headers  请求头
  cookies  请求中的cookie

ImmutableMultiDict: 类似字典的数据结构, 与字典的区别,可以存在相同的键  
	args和form都是ImmutableMultiDict的对象
ImmutableMultiDict中数据获取方式
	dict['uname']dict.get('uname)
获取指定key对应的所有值
	dict.getlist('uname')
                             
1. args
   - get请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象
   - 数据存储也是key-value
   - 外层是列表,列表中的元素是元组,元组中左边是key,右边是value
2. form
   - 存储结构个args一致
   - 默认是接收post参数
   - 还可以接收PUT,PATCH参数

Response
服务器返回给客户端的数据
由程序员创建,返回Response对象
  1. 直接返回字符串, 可以返回文本内容,状态码
  2. render_template 渲染模板,将模板转换成字符串
  3. 通过make_response(data,code)
    - data 返回的数据内容
    - code 状态码
  4. 返回Response对象

重定向
  redirect()
  url_for(‘函数名’,参数=value)

终止执行, 抛出异常
	主动终止 abort(code)

捕获异常
	@app.app_errorhandler(404)
	def hello(e):
		return ‘LOL’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值