Flask從入門到入土(一)——程序的基本結構
一.初始化
所有Flask程序都必須創建一個程序實例。Web服務器使用一種名爲Web服務器網關接口的協議,把接收自客戶端的所有請求都轉交給這個對象處理。程序實例書Flask類的對象,創建代碼:
from flask import Flask app = Flask(__name__)
Flask類的構造函數只有一個必須指定的參數,即程序主模板或包的名字。在大多數程序中,python的__name__變量就是所需的值。
將構造函數的name參數傳給Flask程序,這一點可能會讓Flask開發新手心生迷惑。Flask用這個參數決定程序的根目錄,以便稍後能夠找到相對與程序個目錄的資源文件的位置。
二.路由和視圖函數
客戶端把請求發送給Web服務器,Web服務器再把請求發送給Flask程序實例。程序實例需要知道對每個URL請求運行哪些代碼,所以保存類一個URL到Python函數的映射關系。處理URL和函數之間關系的程序路由稱爲路由。
<客戶端----Web---Flask>
在Flask程序中定義路由的最簡便方式,是使用程序實例提供的app.route修飾器,把修飾的函數注冊爲路由。下面的例子說明了怎麼使用這個修飾器聲明路由:
 @app.route('/')
 def index():
     return '<h1>hello,world<h1>'
修飾器書python語言的標準特性,可以使用不同的方式修改函數的行爲。通常用法是把函數注冊爲事件處理函數程序。
前例把index()函數注冊爲程序根地址的處理程序。如果部署程序的服務器域名爲www.example.com,在瀏覽器中訪問http://www.example.com後,會觸發服務器執行index()函數。這個函數的返回值稱爲響應,是客戶端收到的內容。如果客戶端書Web瀏覽器,響應就書顯示給用戶查看的文檔。
像index()這樣的函數稱爲視圖函數。視圖函數返回的響應可以是包含HTML的簡單字符,也可以是復雜的表單。
在python代碼中嵌入響應字符串會導致代碼難以維護,所以此處這麼做只是爲了介紹響應的概念。
如果你仔細觀察日常所用服務的某些URL格式,會發現很多地址中都包含可變部分。例如 http://www.example.com/user/<user-name>,Flask支持這種形式的URL,只需在route修飾器中使用特殊的語法即可。
 @app.route('/user/<name>')
 def hellouser(name):
     return '<h1>hello,%s<h1>' %name
尖括號中的內容就是動態部分,任何能匹配靜態部分的URL都會映射到這個路由上。調用視圖函數時,Flask會將動態部分作爲參數傳入函數。在這個視圖函數中,參數用於生成針對個人的歡迎消息。路由中的動態部分默認使用字符串,不過也可以使用類型定義。例如,路由/user/<int:id>只會匹配動態片段id爲整數的URL。Flask支持在路由中使用int,float,path類型,path也是字符串,但不把斜線作爲分隔符,而是當作動態片段的一部分。
三.啓動服務器
程序實例用run方法啓動Flask集成的開發Web服務器(Flask有自己的集成開發服務器,而且調用也是其Web服務器):
if __name__=='__main__':
app.run()
__name=='__main__是python的常慣用法,在這裏確保直接執行這個腳本時才啓動開發Web服務器。如果這個腳本由其他腳本引入,程序假定父級腳本會啓動不同服務器,因此不會執行app.run()。
服務器啓動後,會進入輪詢,等待並處理請求。輪詢會一直運行,直到程序停止,比如按Cril-C鍵。
有一些選項參數可以被app.run()函數接受用於設置Web服務器的操作模式。在開發過程中啓用調試模式會帶來一些便利。
四.一個完整的程序
是時候開發一個程序了。整個hello.py程序腳本就書把前面三個部分合並到一個文件中。
 from flask import Flask
 app = Flask(__name__)
 @app.route('/')
 def index():
     return '<h1>hello,world<h1>'
 @app.route('/user/<name>')
 def hellouser(name):
     return '<h1>hello,%s<h1>' %name
 if __name__=='__main__':
     app.run()
運行後:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
運行結果:
此時在瀏覽器中輸入 http://127.0.0.1:5000/
    
此時在瀏覽器中輸入 http://127.0.0.1:5000/user/master
          
此時命令行的數據:
          
Flask從入門到入土(一)——程序的基本結構的更多相关文章
- Flask從入門到入土(三)——模板
		
模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...
 - Flask從入門到入土(二)——請求响应與Flask扩展
		
———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...
 - Flask從入門到入土(三)——Web表單
		
Flask-WTF擴展可以把處理Web表單的過程變成一種愉悅的體驗.這個擴展對獨立的WTForms包進行了包裝,方便集成到Flask程序中. Flask-WTF及其依賴可使用pip安裝: pip in ...
 - Flask從入門到入土(四)——登錄實現
		
表單介紹 1.表單標籤 聲明表單的範圍,位於表單標籤中的元素將被提交 語法: <form> </form> 屬性: Method(提交方式get,post) , Enctyp ...
 - Flask從入門到入土(五)——Flask与数据库
		
import sqlite3 def init_db(): sql = 'create table user(id INT,name TEXT)' conn = sqlite3.connect(&qu ...
 - GOOGLE搜索從入門到精通V4.0
		
1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...
 - 依賴注入入門——Unity(二)
		
參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html http://www.cnblogs.com/qqlin/tag/Unity ...
 - Delphi APP 開發入門(一)重生的 Delphi
		
Delphi APP 開發入門(一)重生的 Delphi 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀 ...
 - 入門必學NO.1 Android 初學特訓班(第四版) 目錄
		
第 01 章 敲開 Android 的開發大門工欲善其事,必先利其器,要學習 Android 應用程式,先取得功能強大的開發工具,就可讓學習事半功倍. 1.1 Android 是啥米?1.2 建構 A ...
 
随机推荐
- 爬取知名社区技术文章_article_3
			
爬虫主逻辑处理,获取字段,获取主url和子url #!/usr/bin/python3 # -*- coding: utf-8 -*- import scrapy from scrapy.http i ...
 - java连接mysql以及增删改查操作
			
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...
 - Python初识-day1
			
1.第一个python程序(在pycharm中运行的,感觉还不错) 注释: 当行注释:#被注释内容 多行注释:''' 被注释内容 ''' 2.变量 (1) 自己理解的定义(仅供参考): 为了存储数据 ...
 - maven的聚合和继承
			
Maven的聚合特性能够把项目的各个模块聚合在一起构建: 而Maven的继承特性则能帮组抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 聚合:新建一个项目demo ...
 - css img换行之后有空隙
			
这样的2个图片换行之后有空隙<img src="img/qiche.jpg" /> <br /> <img src="img/qiche.j ...
 - Codeforce B. Polycarp and Letters
			
B. Polycarp and Letters time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
 - JavaWeb项目架构之Kafka分布式日志队列
			
架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了. kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由S ...
 - makefile编写--引用
			
1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之 ...
 - 创建github仓库的gh-pages分支
			
用git symbolic-ref命令将当前工作分支由master切换到一个尚不存在的分支gh-pages. $ git symbolic-ref HEAD refs/heads/gh-pages 删 ...
 - 前端-高潮 jQuery
			
jQuery:就是让页面动起来 参考手册:http://jquery.cuishifeng.cn/ DOM/BOM/javaScript 继承的类库 <--->模块 一.查找元素 二.操作 ...