प्रौद्योगिकी साझेदारी

[प्रारम्भकात् प्रवीणपर्यन्तं फ्लास्कः : पाठः २: फ्लास्के परियोजनाविन्यासं लोड् कर्तुं द्वौ उपायौ, मार्गनिर्धारणस्य मूलभूतपरिभाषा तथा च टर्मिनलसञ्चालनम्]।

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-सङ्केतानां च बन्धनं करोति! अस्माकं विकासप्रक्रियायाः कालखण्डे परियोजनालेखनसमये प्रयुक्तं मार्गनिर्धारणं प्रायः ढांचा/परियोजनायां मार्गनिर्देशनकार्यं पूर्णं कर्तुं प्रयुक्तं वर्गं निर्दिशति अयं वर्गः सामान्यतया मार्गनिर्धारणवर्गः, अथवा संक्षेपेण मार्गनिर्धारणं भवति

फ्लास्क् मध्ये 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

प्रणाल्याः अन्तःनिर्मितपरिवर्तकानां विशिष्टः उपयोगः प्रत्येकस्य परिवर्तकस्य टिप्पणीसङ्केते लिखितः अस्ति कृपया प्रत्येकस्य परिवर्तकस्य आरम्भमापदण्डेषु ध्यानं ददातु ।

परिवर्तक नामवर्णेतु
सूत्रपूर्वनिर्धारितः प्रकारः, स्लैशं विना किमपि पाठं स्वीकुर्वति
intधनात्मकपूर्णाङ्कान् स्वीकुर्वति
तारणसकारात्मकं प्लवमानबिन्दुमूल्यानि स्वीकुर्वति
पथंअधिग्रहणं कुर्वन्तुstringपरन्तु स्लैश अपि स्वीकुर्वति
उइदUUID (सार्वभौमिकरूपेण अद्वितीयपरिचयः) स्ट्रिंग् xxxx-xxxx-xxxxx-xxxxxx स्वीकुर्वति

संहिता : १.

# 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 नियमानाम् अनुपालनं न करोति तर्हि पृष्ठं न लभ्यते इति प्रेरयिष्यति।

manage.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