日日夜夜精品视频天天综合网I成人一级片免费看I久久久精品I久草视频免费看I中文字幕亚洲欧美I久久综合免费视频I中文字幕一区二I免费看片在线观看

網站開發 APP開發 小程序開發 SEO優化 公司新聞

基于flask的微信開發(1flask基礎)

2018-05-22 09:34:09
2107

  基于flask的微信開發

  公眾號進行簡單的開發,使用的是webpy這個框架,確實輕巧,也容易上手,但是后來了解到作者已經自殺,框架也沒有人在維護了,所以就放棄了。不過還是致敬作者。這次打算把原先開發的內容遷移到flask上,據說也是比較輕巧,且擴展性非常好,所以有了這個文章,讓我們一起來走進flask的世界。

  flask的安裝

  pip install flask

  但是我們建議是在虛擬環境下去安裝,這樣子才不會污染全局的環境,造成一些不必要的錯誤。

  最小的應用

  額外說一些,其實flask用來構建web應用,web應用是基于http協議的。換句話說,我們可以這樣子認為,我們創建頁面,通過http協議進行網絡之間的傳輸,實現信息的共享。

  測試代碼:

  from flask import Flask

  app=Flask(__name__)

  @app.route("/")

  def index():

  return "hello,world"

  if __name__=="__main__":

  app.run()

  解析:

  可以將Flask看成是我們開發的程序,@app.route設置路由,所謂的路由就是將某個url路徑映射到哪一段代碼上。像上邊,我們將/映射到index函數上,這個模式和.net非常的相似。其實index函數是幫助我們生成和定制http協議中的回包的,這樣理解更好一些。

  app.run讓我們的代碼跑在本地的服務器上,是flask內置的服務器。

  調試模式:

  我們可以在啟動的時候指定服務器為調試模式,調試模式下,當我們修改代碼后,服務器會自定的重新進行加載。

  設置的方式:

  app.run(debug=True) or app.debug=True app.run()

  路由

  路由的設置是通過裝飾器來實現的,裝飾器可以實現橫向切入,即在運行這個函數的時候,可以先運行其他的代碼。像.net里面的注解。

  在路由里面指定變量規則

  給url添加變量的規則是<變量類型:變量名>

  變量類型有:int float path(輸入的部分是路徑)

  測試代碼:

  @app.route("/hello/<username>")

  def hello(username):

  return "hello %s" % username

  @app.route("/hello1/<int:c>")

  def count(c):

  return "you entered %d" % c

  @app.route("/hello2/<path:p>")

  def hello2(p):

  return "the path is %s" % p

  生成url

  url_for函數生成url

  這個函數的第一個參數是一個函數的名字,第二個可以傳遞參數

  設置http方法

  通過設置app.route()這個函數的methods參數,我們可以讓函數支持相應的http方法,methods參數是一個list,我們可以傳相應的方法進去

  測試代碼

  @app.route("/testzz",methods=["GET","POST"])

  def testzz():

  if request.method=="GET":

  return "the get"

  elif request.method=="POST":

  return "the post"

  else:

  pass

  靜態文件的支持

  我們會在網頁中引用一些css或者是一些圖片之類的東西。

  這里使用慣例,我們可以將靜態的內容放在static目錄下,并且路由系統已經為我們做好了這個映射,我們可以使用static/文件名來訪問

  模板渲染

  我們使用Python來生成html是一件很苦逼的事情,很繁瑣,也很麻煩,所以我們這里使用模板引擎來生成前端的HTML頁面。flask中配備了jinjia2模板引擎。

  測試代碼:

  @app.route("/testtemplate")

  @app.route("/testtemplate/<username>")

  def testtemplate(username=None):

  return render_template("test.html",username=username)

  <!doctype html>

  <html>

  <title>hello from flask</title>

  {% if username %}

  hello {{username}}

  {% else %}

  hello,world

  {% endif %}

  </html>

  訪問請求數據

  獲取請求數據,我們通過請求對象request

  獲取GET提交的數據 request.args.get()

  獲取POST或者PUT提交的數據 request.form[“”]

  代碼測試:

  def login():

  if request.method=="GET":

  username=request.args.get("username")

  passwd=request.args.get("passwd")

  return render_template("login.html",m="GET METHOD",username=username,passwd=passwd)

  elif request.method=="POST":

  username=request.form["username"]

  passwd=request.form["passwd"]

  return render_template("login.html",m="POST METHOD",username=username,passwd=passwd)

  else:

  return "error"

  文件上傳

  上傳到服務器端的文件,我們可以通過request.files這個對象來獲取

  測試代碼:

  @app.route("/upload",methods=["GET","POST"])

  def upload():

  if request.method=="POST":

  f=request.files["test"]

  f.save(werkzeug.secure_filename(f.filename))

  return "ok"

  elif request.method=="GET":

  return render_template("upload.html")

  else:

  return "error"

  notice:

  secure_filename這個函數可以為程序提供安全性,保存前確保使用這個函數,這個函數在werkseug這個庫里面

  cookie解析

  cookie是用來跟蹤用戶的。flask中訪問和設置cookie可以通過cookies和set_cookie來實現。

  設置cookie

  通常我們在在視圖函數中返回一個視圖,其實也是相當于返回一個字符串的,只不過這個字符串的內容是html內容,flask幫助我們封裝了response的包,我們可以自己來定制這個response,通過flask中的make_response這個函數。設置cookie是需要設置響應體的,所以需要我們定制response。

  設置cookie

  測試代碼

  @app.route("/setcookie")

  def setCookie():

  resp=make_response()

  resp.set_cookie("username","zhanggd")

  return resp

  獲取cookie

  從客戶端接受到的請求包的內容會被flask封裝進request這個對象內,我們通過這個對象來獲取cookie

  測試代碼

  @app.route("/getcookie")

  def getCookie():

  c=request.cookies["username"]

  return c

  重定向和錯誤

  重定向

  當訪問一個url的時候,跳轉到另一個url對應的位置。

  整個過程為:

  當請求這個url的時候,返回一個code為302的包,然后瀏覽器會訪問302中location中指定的url

  測試代碼:

  @app.route("/")

  def index():

  return redirect(url_for("test"))

  錯誤

  當瀏覽器訪問非法的頁面,或者是提交了非法的內容,我們將要返回給他錯誤的頁面。

  返回一個401

  測試代碼

  @app.route("/test2")

  def test3():

  abort(401)

  自定義404頁面(同樣通過abort進行跳轉)

  @app.errorhandler(404)

  def page_not_found(error):

  return render_template("404.html"),404

  關于響應

  我們在視圖函數里面可以返回三種類型的值:

  字符串:如果返回的是字符串,flask直接封裝進回包的體內

  元祖:如果是元祖的話,flask會根據你設置的相應內容來設置相應的回包,元祖的格式為(視圖,status,headers)headers可以是list或者是字典

  響應對象:如果是直接響應對象,直接根據這個對象來構造

  操作回包代碼測試:

  @app.route("/test3")

  def test4():

  resp=make_response(render_template("404.html"),404)

  resp.headers["test"]="test"

  return resp

  會話

  允許在不同請求之間存儲用戶的信息。

  flask中使用session,這個是session是基于cookie的

  我們需要設置一個秘鑰:app.secret_key=””

  session為一個字典,設置值session[“username”]=username

  刪除session中的值,session.pop(“username”)

?
主站蜘蛛池模板: 999精品视频 | 国产欧美精品在线观看 | 天堂久久电影网 | 国产精品一区二区三区电影 | 操操操夜夜操 | 亚洲精品在线播放视频 | 日产乱码一二三区别在线 | 国产传媒一区在线 | 日韩免费观看高清 | 91精品国产欧美一区二区 | 久久看片 | 成人在线观看资源 | av超碰在线 | 四虎成人精品永久免费av九九 | 日韩av一区二区三区四区 | 久久视频这里只有精品 | 91大神精品视频在线观看 | 亚洲精品美女久久久久 | 五月天久久 | 青青视频一区 | 天天骚夜夜操 | 91在线成人 | 久久免费国产视频 | 正在播放亚洲精品 | 国产九九九精品视频 | 韩日精品在线 | 国产亚洲精品综合一区91 | 日本女人的性生活视频 | 免费在线观看亚洲视频 | 欧美 日韩 成人 | 麻豆久久一区 | 最新av在线播放 | 曰韩精品 | 午夜精品久久久久99热app | 国产精品一区久久久久 | 美女精品国产 | 久久综合九色综合欧美就去吻 | 亚州性色 | 中文字幕亚洲情99在线 | 欧美精品久久久久久久免费 | 精品福利视频在线 | 久久国产成人午夜av影院潦草 | 国产免费国产 | 狠狠狠色丁香综合久久天下网 | 亚洲一区二区视频 | 免费黄色在线 | 伊人手机在线 | 婷婷色综合色 | 中文在线免费观看 | 一级久久精品 | 国产成人av免费在线观看 | 91香蕉国产 | 国产精品福利午夜在线观看 | 国产精品一区二区美女视频免费看 | 日韩电影中文,亚洲精品乱码 | 最新国产精品拍自在线播放 | 日批视频在线播放 | 69xxxx欧美| 特级毛片在线 | 又粗又长又大又爽又黄少妇毛片 | 成人黄色av免费在线观看 | av大全在线看| 久久人操 | 中文字幕视频 | 麻豆视频在线免费看 | 成人黄色资源 | 日日操日日操 | 五月开心六月婷婷 | 天堂在线一区二区 | 91精品国产自产老师啪 | 国产精品第一 | 夜夜视频欧洲 | 国产一级免费在线观看 | 国产精品2区 | 久久综合成人 | 色婷婷狠狠五月综合天色拍 | 欧美激情视频一区 | 97在线观看| 天天色天天干天天色 | 午夜av免费看| 91国内产香蕉 | 五月婷婷在线观看 | 成人国产一区 | 伊人成人激情 | 免费视频一区 | 久久久久免费网站 | 日日碰狠狠躁久久躁综合网 | 国产精品久久久久久久久久妇女 | 日韩性xxx| 在线免费看黄色 | 亚洲性xxxx| 91成人蝌蚪 | 天天天插 | 麻豆视屏 | 久久超碰99| av在线免费播放网站 | 毛片网站免费在线观看 | 97在线视频免费播放 | 97看片网 |