Flask学习(一) - 基础入门

基础入门

    Flask是基于WerkzeugJinja 2和良好意图的Python微框架,其实在使用过程中发现里面很多内容和Django类似,特别是在模块渲染的block一块还有包括if、for等语法和python代码的引用,诸如{% %}和{{ }}等等,但是其中对于url的设置则是全新版块,开启服务调用函数也要轻便不少。

入门

    Flask易于安装,可以直接在终端下用命令pip install flask(注意:项目过程中创建项目最好区分python版本和环境,可以具体了解下anaconda 或者virtualenv

第一个helloworld

1.创建项目(这里使用的工具是Pycharm专业版,注意工作环境)

image

2.主程序

from flask import Flask  #导入flask

app = Flask(__name__)  


@app.route('/')  #装饰器,用作url与视图函数的映射,一般写在函数上方
def index():
    return 'Index Page'

if __name__ == '__main__':  #主函数,运行后在浏览器输入127.0.0.1:5000(或者进入控制台显示的地址即可),app.run内可以指定参数,比如端口号和debug等,不指定则使用默认。
    app.run()

传递一个参数name,这个类的一个实例将是我们的WSGI应用程序。第一个参数是应用程序模块或包的名称。如果您使用的是单个模块(如本示例所示),则应使用name,因为根据它是作为应用程序启动还是作为模块导入,名称将不同。这是必需的,以便Flask知道在哪里查找模板,静态文件等,也同时方便flask插件比如Flask-sqlalchemy出现错误的时候,好去查询错误所在。

image.png

3.if name== "main"在Flask的含义

    一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if name== 'main': 的作用就是控制这两种情况执行代码的过程,在if name== 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。
    Flask中,一般生产环境使用 nginx+uwsgi 作为 flask 自带的web服务器,使用if name == "main"判断,避免在生产环境中启动flask自带的web服务器。

Debug模式

   开启debug模式后可以在网页上显示出出错信息,并且在程序段可以实现自动刷新。

   1.直接在app.run内添加参数

      app.run(debug=True)

   2.调用配置文件

      新建config.py,相关公共系统配置均可以写入这里,之后项目开发会根据实际区分开来不同的配置
      在主文件里面调用配置文件,先用import config引入config.py,然后可以用app.config.from_object(config)或者app.run(debug=app.config['DEBUG'])实现引用,debug模式开启后控制台会显示状态:activate


image

Route路由

     在flask中有两种路由注册的方法,
     1.@app.route('/hello'),较为便捷的,采用python语言的装饰器来做路由注册,直接给视图函数增加装饰器即可。
     2.app.add_url_rule("/hello/", view_func=hello),view_func参数指定视图函数
     其实两种方式本质上都是通过app.add_url_rule("/hello/", view_func=hello)这种方式实现的,只不过第一种方法在装饰器内部Flask自己调用了app.add_url_rule("/hello/", view_func=hello)。
     可以在路由中定义参数,放在<>之中,可以自定义类型,例如:


image

唯一路由

@app.route('/projects/')
    def projects():
         return  'The project page'
@app.route('/about')
    def about():
        return 'The about page'

    projects端点的规范URL 具有尾部斜杠。它类似于文件系统中的文件夹。如果您访问的URL没有斜杠,则Flask会将您重定向到带有斜杠的规范URL。
    about端点的规范URL 没有尾部斜杠。它类似于文件的路径名。使用尾部斜杠访问URL会产生404“未找到”错误。这有助于保持这些资源的URL唯一,这有助于搜索引擎避免两次索引相同的页面。

url_for

    要构建特定功能的URL,请使用该url_for()功能。它接受函数的名称作为其第一个参数和任意数量的关键字参数,每个参数对应于URL规则的可变部分。未知的变量部分作为查询参数附加到URL,url_for用于视图函数转向url,重定向和模版渲染中的页面跳转等。

    url_for('index', page=2)   #返回是 /?page=2
    url_for('login')                 #返回login函数的路由

redirect

    功能就是跳转到指定函数的url,大部分情况下,都是和url_for一起使用的,例如:

@app.route('/')
def  hello_world():
    return'Hello World'

@app.route('/<name>/')
 def  hello(name):    
 if  name =='Harp':
    return'Hello %s'  % name
 else:
    return  redirect(url_for('hello_world'))

静态文件

    动态Web应用程序还需要静态文件。这通常是CSS和JavaScript文件的来源。理想情况下,您的Web服务器配置为为您提供服务,但在开发期间,Flask也可以这样做。只需创建一个static在包中或模块旁边调用的文件夹,它就可以在/static应用程序中找到。
    静态文件指css、js、图片等文件,通常会在项目根目录下的static目录(没有则自行建立)下建立相应目录,然后利用flask调用模块,它会自动前往相应文件的根目录下寻找文件所在。


image
url_for("static",filename="css/demo.css")  #在根目录下的static文件夹下的css文件夹下寻找demo.css

jinja2模版

    要渲染模板,您可以使用该render_template() 方法。您所要做的就是提供模板的名称以及要作为关键字参数传递给模板引擎的变量。这是一个如何呈现模板的简单示例:

from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', context={})

   模板放在templates文件夹下,渲染模板只用写模板名字不用写文件夹路径,字典传参可以用两个星号将字典转换成关键字参数传递进去,也可以自行实例化参数,例如:

context = {
                name = 'Tom'
}
    return  render_template('hello.html',**context)

   更多关于render_template模块参见官方文档

模版继承和block

    templates中的html页面中不可避免都有很多重复板块,类似导航或者尾部栏,就可以定义一个基础页面base.html作为父模版,其他的诸如主页、登录页等的相应板块就直接继承自父模版,{% extends ‘base.html’ %},如果在子页面中要定义单独的内容块,则在父模版中的相应位置使用{% block 可自定义名字%}{% endblock%}占位,然后在子页面中插入{% block 自定义名字%}{% endblock%},在其中定义代码段即可。
   有关jinja2模版相关,参见官方文档

过滤器

   处理一些变量,作用的对象是变量 ,例:

  {{ name | default}}   #变量没有值则调用默认值
  {{ name  |  length}}  #返回长度                   

变量语法

   {{ 变量名 }},接收函数内传递过来的字典,并用于在前台页面展示,调用变量的值
   包括for循环迭代,if语句等都和python内类似,{% %},均需要结束段。{{%for x in xxx %}}{% endfor %},{% if %}{% else %}{% endif %}.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容