Κοινή χρήση τεχνολογίας

[Φιάλη από αρχάριους σε ικανούς: Μάθημα 2: Δύο τρόποι φόρτωσης της διαμόρφωσης έργου σε φιάλη, βασικός ορισμός δρομολόγησης και λειτουργία τερματικού]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Δύο τρόποι για να φορτώσει η φιάλη τη διαμόρφωση του έργου

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

"""第一种:flask项目加载站点配置的方式"""
# app.config["配置项"] = 配置项值
# app.config["DEBUG"] = False

"""第二种:flask项目加载站点配置的方式"""
# app.config是整个flask项目默认的配置属性,里面包含了所有的可用配置项,配置项的属性名都是大写字母或大小字母+下划线组成
config = {
    "DEBUG": True
}
app.config.update(config)

# 4. 可以通过实例对象app提供的route路由装饰器,绑定视图与uri地址的关系
@app.route("/")
def index():
    # 5. 默认flask支持函数式视图,视图的函数名不能重复,否则报错!!!
    # 视图的返回值将被flask包装成响应对象的HTML文档内容,返回给客户端。
    return "<h1>hello flask</h1>"


if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Βασικός ορισμός της δρομολόγησης

Τα ονόματα των διαδρομών και των προβολών πρέπει να είναι μοναδικά παγκοσμίως και να μην μπορούν να επαναληφθούν, διαφορετικά θα αναφερθεί σφάλμα.

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

# 参数1:rule设置当前视图的路由地址
# 惨呼2:methods,设置当前视图的HTTP请求方法,允许一个或多个方法,不区分大小写
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Τι είναι η δρομολόγηση;

Η δρομολόγηση είναι αΧαρτογράφηση σχέσεων . Είναι μια σχέση αντιστοίχισης ένα προς ένα που δεσμεύει εφαρμογές (προβολές) και διευθύνσεις url! Κατά τη διαδικασία ανάπτυξής μας, η δρομολόγηση που χρησιμοποιείται κατά τη σύνταξη έργων αναφέρεται συχνά στην κλάση που χρησιμοποιείται για την ολοκλήρωση της συνάρτησης δρομολόγησης στο πλαίσιο/έργο Αυτή η κλάση είναι γενικά η κλάση δρομολόγησης ή για συντομία δρομολόγηση.

Στο flask, το URL μπορεί να μεταβιβάσει παραμέτρους δρομολόγησης με δύο τρόπους:

Οι παράμετροι δρομολόγησης αποτελούν μέρος της διαδρομής url.

Λήψη αυθαίρετων παραμέτρων δρομολόγησης

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

"""
路由参数的传递
小括号圈住,里面写上参数变量名
在视图中即可通过参数列表按命名来接收
接收参数时,如果没有在设置路由中设置参数的类型,则默认参数类型为字符串类型
"""
@app.route("/goods/<cid>/<gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"显示cid={cid},gid={gid}的商品信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Λήψη αναγνωρισμένων παραμέτρων τύπου

Για να περιοριστεί ο τύπος των παραμέτρων δρομολόγησης, ο μετατροπέας του συστήματος φιάλης είναι γραμμένος στο αρχείο werkzeug/routing/converters.py. Στο κάτω μέρος μπορείτε να δείτε το ακόλουθο λεξικό:

# converters用于对路由中的参数进行格式转换与类型限定的
DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] = {
    "default": UnicodeConverter, # 默认类型,也就是string
    "string": UnicodeConverter, # 字符串,不包含 /
    "any": AnyConverter,    # 任意类型
    "path": PathConverter,  # 也是字符串,但是包含了 /
    "int": IntegerConverter,
    "float": FloatConverter,
    "uuid": UUIDConverter,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Η συγκεκριμένη χρήση των ενσωματωμένων μετατροπέων του συστήματος αναγράφεται στον κώδικα σχολίων κάθε μετατροπέα.

Όνομα μετατροπέαπεριγράφω
σειράΠροεπιλεγμένος τύπος, δέχεται οποιοδήποτε κείμενο χωρίς κάθετες
ενθΔέχεται θετικούς ακέραιους αριθμούς
φλοτέρΔέχεται θετικές τιμές κινητής υποδιαστολής
μονοπάτιαναλαμβάνωstringαλλά δέχεται και καθέτους
uuidΑποδέχεται συμβολοσειρά UUID (Universally Unique Identifier) ​​xxxx-xxxx-xxxxx-xxxxx

Κώδικας:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"

"""
通过路由转换器来对路由参数显示格式转换和限制类型
"""
@app.route("/goods/<float:cid>/<uuid:gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"显示cid={cid},gid={gid}的商品信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

Μετατροπέας παραμέτρων προσαρμοσμένης διαδρομής

Ονομάζονται επίσης παράμετροι δρομολόγησης κανονικής αντιστοίχισης.

Στην ανάπτυξη ιστού, ενδέχεται να υπάρχουν σενάρια που περιορίζουν τους κανόνες πρόσβασης χρήστη Αυτή τη στιγμή, πρέπει να χρησιμοποιήσετε κανονική αντιστοίχιση για να περιορίσετε τις παραμέτρους του αιτήματος σύμφωνα με τους δικούς σας κανόνες πριν από την πρόσβαση.

Τα συγκεκριμένα βήματα υλοποίησης είναι:

  • Εισαγωγή της βασικής κλάσης μετατροπέα BaseConverter: Στο Flask, όλοι οι κανόνες αντιστοίχισης δρομολόγησης καταγράφονται χρησιμοποιώντας αντικείμενα μετατροπέα.
  • Προσαρμοσμένος μετατροπέας: Η προσαρμοσμένη κλάση κληρονομείται από τη βασική κλάση μετατροπέα BaseConverter
  • Προσθέστε μετατροπείς στο προεπιλεγμένο λεξικό μετατροπέα DEFAULT_CONVERTERS
  • Χρησιμοποιήστε προσαρμοσμένους μετατροπείς για να εφαρμόσετε κανόνες προσαρμοσμένης αντιστοίχισης

Κώδικας

  • Εισαγωγή βασικής κατηγορίας μετατροπέα
from werkzeug.routing.converters import BaseConverter
  • 1
  • Προσαρμοσμένος μετατροπέας
class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]

  • 1
  • 2
  • 3
  • 4
  • 5
  • Προσθέστε τον μετατροπέα στο προεπιλεγμένο λεξικό μετατροπέα και καθορίστε το όνομα του μετατροπέα που θα χρησιμοποιηθεί: re
app.url_map.converters["re"] = RegexConverter
  • 1
  • Χρησιμοποιήστε έναν μετατροπέα για την εφαρμογή προσαρμοσμένων κανόνων αντιστοίχισης Οι κανόνες που ορίζονται αυτήν τη στιγμή εδώ είναι: αριθμός κινητού τηλεφώνου
"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""
from werkzeug.routing.converters import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]

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

@app.route("/sms/<re('1[3-9]d{9}'):mobile>")
def sms(mobile):
    return f"发送短信给手机号:{mobile}的用户"

@app.route("/goods/<re('d+'):id>")
def goods(id):
    return f"显示商品id={id}的信息"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Εκτελέστε τη δοκιμή: http://127.0.0.1:5000/sms/13012345671 Εάν το URL στο οποίο έχετε πρόσβαση δεν συμμορφώνεται με τους κανόνες, θα σας ζητηθεί να μην είναι δυνατή η εύρεση της σελίδας.

manager.py, κωδικός τάξης:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)

# 开启debug模式
app.config["DEBUG"] = True

"""
自定义路由转换[在实际项目开发中,我们会单独准备一个python文件来保存转换器的定义代码]
"""
from werkzeug.routing.converters import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]

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

@app.route("/sms/<re('1[3-9]d{9}'):mobile>")
def sms(mobile):
    return f"发送短信给手机号:{mobile}的用户"

@app.route("/goods/<re('d+'):id>")
def goods(id):
    return f"显示商品id={id}的信息"

if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

Έργο Flask σε λειτουργία τερματικού

#  如果要基于开发环境在终端启动项目,设置环境变量如下:
export FLASK_DEBUG=True
# 如果要基于生产环境在终端启动项目,设置环境变量如下:
# export FLASK_DEBUG=Flase

# 找到创建flask应用的模块路径,例如:manage.py
# 则ubuntu等Linux下的终端:
export FLASK_APP=manage.py  # 这是临时设置,如果有永久设置,可以通过/etc/profile保存
# 2. 在当前虚拟环境中,如果安装了flask模块,则可以使用全局命令flask run,即可运行flask项目
flask run # 采用默认的127.0.0.1 和 5000端口运行项目 
flask run --host=0.0.0.0 --port=8088 # 可以改绑定域名IP和端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11