Flask框架(一)

今天跟大家分享下,我之前关于flask学习的一些笔记。如果有志同道合的朋友可以互相交流交流。

Flask是第三方框架。

第一方是python官方吉多,第二方我们开发者自己,第三方框架工具类提供者。

虚拟环境

一个特殊的文件夹,里面放着程序所需要的各种环境,比如扩展包,flask版本,python解释器等内容。

不同程序选用不同虚拟环境互不影响。

知名的框架?

web:

1.flask: 提供基本功能,属于轻量级

2.django: 提供相对完整功能,重量级

3.tornado: 偏嵌入式web应用,非阻塞式服务器

爬虫类:

scrapy

分布式:

spark

大数据:

hadoop

人工智能:

scikit-learn

apache:

美国软件基金会组织,里面提供的都是开源框架,而且免费,比如,Tomcat,HBase,Activty..等等350多个

 

七行灵魂代码(默认端口5000)

#1.导入Flask类

from flask import Flask

#2.创建Flask对象接收一个参数__name__,它会指向程序所在的包

app = Flask(__name__)

#3.装饰器的作用是将路由映射到视图函数index

@app.route('/')

def index():

    return 'Hello World'

#4.Flask应用程序实例的run方法,启动WEB服务器

if __name__ == '__main__':

    app.run()

Flask 初始化参数

import __name__:Flask 程序所在的包,传__name__就可以,

其可以决定flask在访问静态文件时查找的路径。

static_url_path 静态文件访问路径,可以不传默认为/+static。

static_folder :静态文件存储的文件夹,可以不传默认为static。

template_folder:模板文件存储的文件夹,可以不传,默认为templates。

Flask相关配置的加载方式

在 Flask 程序运行的时候,可以设置相关配置比如:配置 Debug 模式(修改代码不需要关闭程序,可以实时生效,如果代码错误会给出友好提示),配置数据库连接地址等,设置 Flask配置有以下三种方式:

从配置对象中加载(常用)

app.config.from_object()

从配置文件中加载 app.config.from_pyfile()

从环境变量中加载(了解)  app.config.from_envvar()

 


# 配置对象,里面定义需要给 APP 添加的一系列配置

class Config(object):

    DEBUG = True

# 从配置对象中加载配置

app.config.from_object(Config)

 

一.指定路由地址

# 指定访问视图函数demo1,访问路径为/demo1

第一种

@app.route('/demo1')

def demo1():

return 'demo1'

解决循环导包的方式是将非主模块在主模块中导入

第二种

#先定义函数后用app装饰

副模块 def detail():

return ‘detail’

在主模块中app,route(‘/detail’)(detail)

二.给路由传参示例

有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。

# 路由传递参数,整数

@app.route('/user/<int:user_id>')

def user_info(user_id):

    return 'the num is %d' % user_id

# 路由传递参数,字符串,不指定path默认就是字符串

@app.route('/user/<path:user_id>')

def user_info(user_id):

return 'hello %s' % user_id

提示:之所以int,pathfloat可以接收整数,字符串,小数,是由于werkzeug提供了IntegerConverter,PathConverter对应转换器.

当系统提供的转换器满足不了需求,需要自定义

固定格式:

1. 自定义类(转换器),继承自BaseConverter

2. 编写init方法,接收两个参数

3. 一个参数给父类空间初始化, 另外一个给子类规则初始化

4. 将自定义的转换器,添加到系统默认的转换器列表中 (app.url_map.converters)

from werkzeug.routing import BaseConverter

app = Flask(__name__)

# 1. 自定义类(转换器),继承自BaseConverter

class MyRegexConverter(BaseConverter):

    #不能写死,不够灵活

    # regex = '\d{3}'

    # 2.编写init方法, 接收两个参数

    def __init__(self,url_map,regex):

        # 3.一个参数给父类空间初始化, 另外一个给子类规则初始化

        super(MyRegexConverter, self).__init__(url_map)

        self.regex = regex

# 4. 将自定义的转换器,添加到系统默认的转换器列表中(app.url_map.converters)

app.url_map.converters["re"] = MyRegexConverter

print(app.url_map.converters)

#re()好比是调用了init方法,参数1:app.url_map, 参数2:是括号里面内容

@app.route('/<re("\d{3}"):number>')

def hello_world(number):

    return "the number is %s"%number

 

jsonify(返回的json数据可以被ajax接收并在方法中可以调用处理)

后端返回指定的json数据类型给前端浏览器使用,jsonify生成json数据响应体。

return jsonify(dict)

简化为 return jsonify(key=value,key=value)

return jsonify(name=’zhangsan’,age=”13”)

重定向

redirect(重定向),url_for,生成文本响应体

格式: redirect("地址") 自动向地址中跳转视图函数

注意点: redirect有个代号叫做302

url_for: 反解析,根据视图函数名称,找到路径,好处:可以传递参数

格式:url_for('视图函数',key=value)

@app.route('/rng')

def rng():

    return redirect(url_for('lpl', token=1))

@app.route('/lol')

def lol():

    return '我们有最棒的比赛<a href=%s>lpl</a>'%url_for('lpl',token=2)

@app.route('/lpl/<int:token>')

def lpl(token):

    if token == 1:

        return "我们是冠军"

    elif token == 2:

        return "这里是世界最强的赛区lpl!"

    else:

        return "LPL今年S8夺冠!"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值