国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

flask基礎(chǔ)之一

archieyang / 2194人閱讀

摘要:最經(jīng)典的就是了暫時性重定向的狀態(tài)碼是,表示頁面暫時性被跳轉(zhuǎn),比如訪問一個需要權(quán)限的網(wǎng)址,如果當(dāng)前用戶沒有登錄,應(yīng)該重定向到登錄頁面。作為額外的消息頭如果以上的條件都不滿足,會假設(shè)返回值是一個合法的應(yīng)用程序,并通過轉(zhuǎn)換成一個請求對象。

flask基礎(chǔ)之一 hello world
#從flask這個包中導(dǎo)入Flask這個類
#Flask這個類是項目的核心,以后的很多操作都是基于這個類的對象
#注冊url,注冊藍(lán)圖都是這個類的對象
from flask import Flask
#創(chuàng)建一個Flask對象,傳遞__name__這個參數(shù)進(jìn)去
#__name__這個參數(shù)的作用:
# 1.規(guī)定模板和靜態(tài)資源的路徑
# 2.以后的一些Flask插件,比如Flask_migrate,Flask_SQLAlchemy報錯的話,哪么Flask就會通過這個參數(shù)找到具體的報錯位置
app = Flask(__name__)
# @app.route()是一個裝飾器,將對應(yīng)的“/”路徑應(yīng)用到hello_world()這個函數(shù)上面
# 在訪問“/”的時候在頁面上返回Hello World
@app.route("/")
def hello_world():
    return "Hello World!"
# 如果作為一個主文件運(yùn)行,哪么執(zhí)行app.run()方法,也就是啟動這個網(wǎng)站
if __name__ == "__main__":
    app.run()
debug模式

為什么要開啟DEBUG模式?

如果開啟了debug模式,name代碼在調(diào)試過程中出現(xiàn)了異常,在瀏覽器頁面中可以看到具體的報錯信息,以及具體的錯誤代碼位置,方便開發(fā)者調(diào)試。

如果flask開啟了debug模式,name以后再python中修改任何代碼,只要在pycharm中使用ctrl+s即可保存重載,不需要手動去重載程序

如何配置debug模式:

app.run()

app.run(debug=True)

app.debug

app.debug = True

配置信息方式(使用參數(shù)形式的方式)

app.config.update[DEBUG=True]
#其實也就是update了config字典

通過配置文件的形式

- 創(chuàng)建一個config.py的配置文件,寫入
DEBUG = True
- 然后在你的app.py文件中寫入
app.config.from_object(config) #即可讀取配置文件中的DEBUG=True

debug PIN碼

D:MyDevSoftInstallDirPython3python3.exe D:/myflask/base/base.py
* Restarting with stat
* Debugger is active!
* Debugger PIN: 177-952-649
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

然后在頁面上調(diào)試代碼的時候用到。
也是為了安全考慮。

配置文件兩種方式詳解

第一種方式:

在項目主路徑下創(chuàng)建config.py

DEBUG=True

然后在主項目里面去讀取config.py里面的配置:

from flask import Flask
import config
app = Flask(__name__)
app.config.from_object(config)

第二種方式:直接讀取文件的形式,也可以是普通的txt文件形式;這種方式不需要直接import config

在項目主路徑下創(chuàng)建config.py

DEBUG=True

然后在主項目里面去讀取config.py里面的配置:

from flask import Flask
app = Flask(__name__)
app.config.from_pyfile("config.py",silent=True) #靜默模式加載配置文件(找不到配置文件不報錯),文件的后綴名不可少
url與視圖函數(shù)的映射

傳遞參數(shù):

傳遞參數(shù)的語法是/<參數(shù)類型:參數(shù)名稱>/,然后在視圖函數(shù)中也要定義同名的參數(shù)

參數(shù)的數(shù)據(jù)類型

string:只接受字符串,沒有任何“/或者”的文本

int:只接受整數(shù)

float:只接受浮點(diǎn)數(shù),整數(shù)都不行哈

path:和string類似,但是接受斜杠

uuid:只有接受符合uuid的字符赤岸,一般用作表的主鍵

any:可以指定多種路徑

接收用戶傳遞參數(shù)的方式:

使用path的方式(將參數(shù)嵌入到路徑中)

使用查詢字符串的形式 (也就是通過?key=value的形式傳遞的,只能通過request.args.get的方式來獲取)

如果頁面想要做SEO優(yōu)化的話,那么推薦使用path的形式,反之就是查詢字符串的形式
練習(xí)

from flask import Flask,request
app = Flask(__name__)
@app.route("/")
def hello_world():
    return "Hello World!"
@app.route("/list/")
def article_list():
    return "article list!"
@app.route("/p1/")
def article_detail(article_id1):
    return "請求的文章是:%s" %article_id1
@app.route("/p2/")
def article_detail2(article_id2):
    return "請求的文章是:%s" %article_id2
@app.route("/p3/")
def article_detail3(article_id3):
    return "請求的文章是:%s" %article_id3
@app.route("/p4/")
def article_detail4(article_id4):
    return "請求的文章是:%s" %article_id4
# import uuid
# print(uuid.uuid4())
@app.route("/p5/") #數(shù)據(jù)的唯一性,長度較長,有損效率(一般在用戶表中使用)6a9221f6-afea-424a-a324-8ceaa5bdfc98
def article_detail5(article_id5):
    return "請求的文章是:%s" %article_id5
@app.route("/p6///")
def detail(url_path,id):
    if url_path == "blog":
        return "博客詳情 %s" %id
    else:
        return "用戶詳情 %s" %id
#通過問號形式傳遞參數(shù)
@app.route("/d/")
def d():
    wd = request.args.get("wd") #獲取瀏覽器傳遞參數(shù)
    return "通過查詢字符串的方式傳遞的參數(shù)是,%s"%wd #請求http://127.0.0.1:8080/d/?wd=php
if __name__ == "__main__":
    app.run(debug=True,host="0.0.0.0",port=8080)
url_for

將視圖函數(shù)反轉(zhuǎn)回URL,跟app.route相反

URL的更新大于視圖函數(shù),所以在大規(guī)模項目中比較實用

* 基本使用

url_for的第一個參數(shù)是視圖函數(shù)的函數(shù)名對應(yīng)的字符串(endpoint),后面的參數(shù)就是你傳遞給url;如果傳遞的參數(shù)在url中已經(jīng)定義了,那么這個參數(shù)就會被當(dāng)成path的值傳遞給url;如果這個參數(shù)沒有在url中定義,那么將變成查詢字符串的形式

from flask import Flask,url_for,request
app.route("/")
    return url_for("my_list",page=1,count=2) #這樣的話就會在頁面上構(gòu)建出/post/list/1/?count=2的信息
app.route("/post/list//")
def my_list():
    return "my list"

為什么需要url_for

如果將來要修改URL,但沒有修改URL對應(yīng)的函數(shù)名,就不用到處去替換URL了。
URL會自動處理特殊字符(轉(zhuǎn)義成十六進(jìn)制),不需要手動去處理
from flask import Flask,url_for,request
@app.route("/")
def hello_world():
    return url_for("login",next="/current") #頁面返回/login/?next=%2Fcurrent登錄前的信息
    # print(url_for("my_list",page=1,count=200))
    # return "hello world"
@app.route("/login/")
def login():
    # next = request.args.get("next") #登錄前的信息,在登陸之后仍舊保持
    return "login"
@app.route("/list/")
def my_list():
    return "my list"
@app.route("/detail//")
def detail():
    return "detail"
if __name__ == "__main__":
    app.run(debug=True)
自定義url轉(zhuǎn)換器

url的參數(shù)轉(zhuǎn)換成滿足自己需求的數(shù)據(jù)類型

自定義url轉(zhuǎn)換器的方式:

實現(xiàn)一個類,繼承BaseConverter

在自定義的類中重寫regex,也就是這個變量的正則表達(dá)式

將自定義的類映射到app.url_map.converters上。

實現(xiàn)用戶訪問/posts/a+b
to_python的作用
這個方法的返回值會傳到view函數(shù)中作為參數(shù)
to_url的作用
這個方法的返回值會調(diào)用url_for來生成符合要求的url形式

from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
#手機(jī)號碼正則
class TelephoneConveter(BaseConverter):
    regex = r"1[85734]d{9}"
app.url_map.converters["tel"] = TelephoneConveter
#用戶訪問/posts/a+b/
class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split("+")
    def to_url(self, value):
        print(value)
        return "+".join(value)
        # return "hello"
app.url_map.converters["list"] = ListConverter
@app.route("/")
def hello_world():
    print(url_for("posts",broads=["a","b"]))
    return "Hello World!"
@app.route("/user//")
def user(user_id):
    return "your user id is %d" %user_id
@app.route("/telephone//")
def my_tel(my_tel):
    return "your telephone number is %s"%my_tel
@app.route("/posts//")
def posts(broads):
    # broads = broads.split("+")
    return "your posts is %s"%broads
if __name__ == "__main__":
    app.run(debug=True)
小細(xì)節(jié) 在局域網(wǎng)訪問站點(diǎn)
app.run(host="0.0.0.0")
指定端口號

默認(rèn)是5000端口,修改端口如下

app.run(host="0.0.0.0",port=8899 )
ulr唯一

在定義URL的時候,盡量在url后面加/,原因如下:

如果不加/的話瀏覽器訪問這個url的時候會默認(rèn)加/,這樣的話就訪問不到了

搜索引擎會將不加/的url和加/的url是兩個不同的url,會將其誤解。

GET和POST請求

在網(wǎng)絡(luò)請求中有許多的請求方式,比如GET,POST,DELETE,PUT,常用的請求方式如下:

GET:也就是獲取服務(wù)器上的資源,不會修改服務(wù)器上的內(nèi)容。

POST:就是向服務(wù)器提交文件或者數(shù)據(jù),一般POST會對服務(wù)器的狀態(tài)產(chǎn)生影響。

關(guān)于參數(shù)傳遞:

GET:把參數(shù)放到URL中,通過?xx=xxx的形式傳遞的,因為會把參數(shù)放到url中,所以視力好的話,一眼就可以看到傳遞的參數(shù)。

POST:把參數(shù)放到Form Data中,避免被偷窺到的風(fēng)險(也有可能通過抓包的方式被竊取),一般不安全的,不曉得提交的內(nèi)容是否是帶病毒的文件。

flask中,route方法,默認(rèn)只能使用GET的方式請求url。如果想要設(shè)置自己的請求方式,那就要在methods中多傳遞一個請求方式的參數(shù)。
實例如下:
創(chuàng)建url_detail的項目,項目結(jié)構(gòu)如下:
├─url_detail.py
├─static
└─templates
   |_login.html

url_detail.py"

from flask import Flask,request,render_template
app = Flask(__name__)
@app.route("/",methods=["GET"])
def hello_world():
    return "Hello World!"
@app.route("/list/",methods=["POST"])
def my_list():
    return "list"
@app.route("/login/",methods=["POST","GET"])
def login():
    if request.method == "GET":
       return render_template("login.html")
    else:
        return "Success"
if __name__ == "__main__":
    app.run(debug=True,host="0.0.0.0")

templates/login.html




    
    Title


URL重定向

也就是從一個頁面跳轉(zhuǎn)到另一個頁面,也就是重新定位一個方向
分類:

永久性重定向:http的狀態(tài)碼是301,多用于舊的網(wǎng)址廢棄了要轉(zhuǎn)到一個新的網(wǎng)址,確保用戶的訪問。最經(jīng)典的就是jingdong.com

暫時性重定向:http的狀態(tài)碼是302,表示頁面暫時性被跳轉(zhuǎn),比如訪問一個需要權(quán)限的網(wǎng)址,如果當(dāng)前用戶沒有登錄,應(yīng)該重定向到登錄頁面。這種情況的話就是用暫時性重定向。

在flask中,重定向是通過flask.redirect(location,code=302)這個函數(shù)來實現(xiàn)的,location指的是需要重定向到的URL,應(yīng)該配合之前講過的url_for()來是用。code代表的是什么類型的重定向,默認(rèn)是302,可以修改成301實現(xiàn)永久重定向。

小例子:

from flask import Flask,url_for,redirect,request
app = Flask(__name__)
app.debug = True
@app.route("/login/",methods=["GET","POST"])
def login():
    return "login page"
@app.route("/profile/",methods=["GET","POST"])
def profile():
    name = request.args.get("name")
    if not name:
        return redirect(url_for("login"))
    else:
        return name
if __name__ == "__main__":
    app.run()

這樣的話就能訪問profile了:

http://127.0.0.1:5000/profile/?name=sss
關(guān)于響應(yīng)

視圖函數(shù)的返回值會被自動轉(zhuǎn)換成一個響應(yīng)對象,flask的轉(zhuǎn)換邏輯如下:

如果返回的是一個合法的響應(yīng)對象,則直接返回

如果返回的是一個字符串,那么flask會重新創(chuàng)建一個werkzeug.wrappers.Response對象。Response會將該字符串作為主體,狀態(tài)碼為200,MIME的類型為text/html,然后返回給Response對象

如果返回的是一個元組,元組中的數(shù)據(jù)類型是response,status,headers,status會覆蓋默認(rèn)的200狀態(tài)碼,headers可以是一個字典或者列表。作為額外的消息頭

如果以上的條件都不滿足,flask會假設(shè)返回值是一個合法的WSGI應(yīng)用程序,并通過Response.force_type(rv,request.environ)轉(zhuǎn)換成一個請求對象。

自定義響應(yīng)

必須繼承自Response

實現(xiàn)類方法:force_type

必須指定app.response_class為你自定義的Response

如果視圖函數(shù)返回的數(shù)據(jù)既不是字符串,也不是元組,也不是Response對象,那么會將返回值傳給force_type,然后將force_type的返回值返回給前端。

#!/usr/bin/python
# -*- coding:utf8 -*-
from flask import Flask,Response,jsonify
import json
app = Flask(__name__)
app.debug = True
#自定義響應(yīng)
class JSONResponse(Response):
    @classmethod
    def force_type(cls, response, environ=None):
        """
        這個方法只有視圖函數(shù)返回非字符串,非元組,非Response對象才會調(diào)用
        :param response:
        :param environ:
        :return:
        """
        print response
        print type(response)
        if isinstance(response,dict):
            #jsonify除了將字典轉(zhuǎn)換成為json對象,還將對象封裝成了一個Response對象
            response = jsonify(response)
            #response = json.dumps(response) #這樣轉(zhuǎn)換的話程序啟動會報錯
        return super(JSONResponse,cls).force_type(response,environ) #返回父類信息
app.response_class = JSONResponse
@app.route("/")
#第一種情況
def hello_world():
    #Response("Hello World",status=200,mimetype="text/html")
    return "Hello World!"
#第二種情況
@app.route("/list1/")
def list1():
    resp = Response("List1")
    resp.set_cookie("country","china")
    return resp
#第三種情況
@app.route("/list2")
def list2():
    return "list2",200,{"X-Name":"abc"}
@app.route("/list3/")
def list3():
    return {"username":"abc","age":11}
if __name__ == "__main__":
    app.run(host="0.0.0.0")

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/113207.html

相關(guān)文章

  • flask基礎(chǔ)之一

    摘要:最經(jīng)典的就是了暫時性重定向的狀態(tài)碼是,表示頁面暫時性被跳轉(zhuǎn),比如訪問一個需要權(quán)限的網(wǎng)址,如果當(dāng)前用戶沒有登錄,應(yīng)該重定向到登錄頁面。作為額外的消息頭如果以上的條件都不滿足,會假設(shè)返回值是一個合法的應(yīng)用程序,并通過轉(zhuǎn)換成一個請求對象。 flask基礎(chǔ)之一 hello world #從flask這個包中導(dǎo)入Flask這個類 #Flask這個類是項目的核心,以后的很多操作都是基于這個類的對象...

    fevin 評論0 收藏0
  • flask基礎(chǔ)之一

    摘要:最經(jīng)典的就是了暫時性重定向的狀態(tài)碼是,表示頁面暫時性被跳轉(zhuǎn),比如訪問一個需要權(quán)限的網(wǎng)址,如果當(dāng)前用戶沒有登錄,應(yīng)該重定向到登錄頁面。作為額外的消息頭如果以上的條件都不滿足,會假設(shè)返回值是一個合法的應(yīng)用程序,并通過轉(zhuǎn)換成一個請求對象。 flask基礎(chǔ)之一 hello world #從flask這個包中導(dǎo)入Flask這個類 #Flask這個類是項目的核心,以后的很多操作都是基于這個類的對象...

    AWang 評論0 收藏0
  • Flask開發(fā)記錄系列之一項目骨架

    第一步,完成項目骨架。 https://github.com/xbynet/flask-skeleton backend all the requirements show the bellow: Flask==0.11.1 Werkzeug==0.11.11 Jinja2==2.8 SQLAlchemy==1.1.2 celery==3.1.23 Flask-sqlalchemy==2.1 f...

    xiaoqibTn 評論0 收藏0
  • Python到底能做什么?

    摘要:數(shù)據(jù)科學(xué)包括機(jī)器學(xué)習(xí),數(shù)據(jù)分析和數(shù)據(jù)可視化首先,機(jī)器學(xué)習(xí)是什么解釋機(jī)器學(xué)習(xí)的最佳方法是給你一個簡單的例子。機(jī)器學(xué)習(xí)算法的工作方式大致相同。這是一個人們競爭為特定問題構(gòu)建最佳機(jī)器學(xué)習(xí)算法的網(wǎng)站。 showImg(https://segmentfault.com/img/remote/1460000018887722); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Sloga...

    Lionad-Morotar 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<