Heim > Backend-Entwicklung > Python-Tutorial > Wie installiere und verwende ich das Python Flask-Framework-Modul?

Wie installiere und verwende ich das Python Flask-Framework-Modul?

WBOY
Freigeben: 2023-05-09 22:37:16
nach vorne
2528 Leute haben es durchsucht

    1. Übersicht

    Python Flask ist ein in Python geschriebenes, leichtes Webanwendungsframework für die schnelle Entwicklung von Webanwendungen und APIs. Bei der Entwicklung wurde auf Einfachheit, Benutzerfreundlichkeit und Skalierbarkeit geachtet.

    Hier sind einige der wichtigsten Funktionen von Python Flask:

    • Leichtgewicht: Flask verfügt über keine redundanten Bibliotheken und Toolkits, wodurch es sehr leichtgewichtig ist , was auch bedeutet, dass Sie bei Bedarf Ihre eigenen Bibliotheken hinzufügen können.

    • Benutzerfreundlichkeit: Die API von Flask ist sehr einfach und leicht zu verstehen und zu erlernen, sodass sie sich sehr gut für Anfänger eignet.

    • Erweiterbarkeit: Flask ist erweiterbar, Sie können Plugins hinzufügen, um seine Funktionalität zu erweitern, und Sie können es problemlos in andere Bibliotheken und Frameworks integrieren.

    • Flexibilität: Mit Flask können Sie die Komponenten auswählen, die Sie benötigen, z. B. Vorlagen-Engine, Datenbank, Formularvalidierung und mehr.

    • Hohe Integration: Flask unterstützt die Integration mit anderen Python-Bibliotheken und Frameworks wie SQLAlchemy, WTForms, Jinja2 usw.

    • RESTful-Unterstützung: Flask ist eine einfach zu verwendende RESTful-API und kann problemlos RESTful-Webdienste erstellen.

    Kurz gesagt ist Python Flask ein leistungsstarkes, benutzerfreundliches, skalierbares und flexibles Web-Framework, das häufig bei der Entwicklung von Webanwendungen und APIs verwendet wird.

    2. Flask-Architektur

    Flask ist ein in Python geschriebenes Webanwendungs-Framework. Es nutzt die Werkzeug-Toolbox und die Jinja2-Template-Engine.

    Das Flask-Framework besteht hauptsächlich aus den folgenden Modulen:

    • Anwendungsmodul: Das Kernmodul von Flask ist der Zugang zum gesamten Web Anwendung und ist für den Empfang von HTTP-Anfragen und Rückantworten verantwortlich. Es ist außerdem für Routing, Fehlerbehandlung, Kontext und andere Funktionen verantwortlich.

    • Routing-Modul: Flask verwendet Dekoratoren, um die Zuordnungsbeziehung zwischen URL-Routen und Ansichtsfunktionen zu definieren.

    • View-Modul: Die View-Funktion ist der Kern der Flask-Webanwendung. Sie verarbeitet HTTP-Anfragen und gibt Antworten zurück, die HTML-Seiten, JSON-Daten usw. zurückgeben können.

    • Vorlagenmodul: Flask verwendet die Jinja2-Vorlagen-Engine, um HTML-Seiten zu generieren. Die Vorlagen-Engine bietet umfangreiche Syntax und Filter zum einfachen Generieren komplexer HTML-Seiten.

    • Datenbankmodul: Flask kann problemlos in eine Vielzahl von Datenbanken integriert werden, darunter MySQL, PostgreSQL, SQLite usw.

    • Formularmodul: Flask-WTF ist eine Formularverarbeitungserweiterung für Flask, die praktische Formularverarbeitungsmethoden zum einfachen Erstellen von Formularen, Validieren von Formulardaten usw. bereitstellt.

    • Erweiterungsmodul: Das Erweiterungsmodul von Flask bietet verschiedene Funktionen, wie E-Mail-Versand, Caching, Login-Authentifizierung usw.

    Das Designkonzept von Flask ist einfach, flexibel und leicht erweiterbar. Es können je nach Bedarf verschiedene Erweiterungen von Drittanbietern ausgewählt werden . Funktionalität hinzufügen. Gleichzeitig bietet Flask auch einige grundlegende Funktionen und Tools, um Entwicklern die schnelle Erstellung von Webanwendungen zu erleichtern.

    3. Anwendungsmodul

    Das Anwendungsmodul ist eines der Kernmodule des Flask-Frameworks. Es ist für die Erstellung einiger Anwendungsebenenkonfigurationen verantwortlich Funktionen. Anwendungsmodule umfassen typischerweise Folgendes:

    • Anwendungsobjekte erstellen: Verwenden Sie die Flask-Klasse, um Anwendungsobjekte zu erstellen. Der Konstruktor der Flask-Klasse erfordert die Übergabe des Namens der Anwendung als Parameter.

    • Konfigurieren der Anwendung: Mit dem Config-Attribut können Sie die grundlegenden Eigenschaften der Anwendung konfigurieren, wie z. B. Debugging-Modus, Schlüssel, Datenbankverbindungen usw.

    • Route registrieren: Verwenden Sie den Routendekorator, um die Zuordnungsbeziehung zwischen URL-Routen und Ansichtsfunktionen zu registrieren. Routing definiert die Zuordnungsbeziehung zwischen der URL-Adresse der HTTP-Anfrage und der Ansichtsfunktion.

    • Ansichtsfunktion definieren: Die Ansichtsfunktion ist eine Funktion, die HTTP-Anfragen verarbeitet und HTML-Seiten, JSON-Daten usw. zurückgeben kann. Ansichtsfunktionen verwenden normalerweise den Route Decorator, um URL-Routen zu definieren.

    • Kontextverwaltung: Flask-Anwendungen verwenden Kontextobjekte, um den Anforderungskontext und den Anwendungskontext zu verwalten. Der Anforderungskontext enthält relevante Informationen für jede HTTP-Anfrage, wie z. B. Anforderungsheader, Anforderungsparameter usw. Der Anwendungskontext enthält anwendungsbezogene Informationen wie Konfigurationsinformationen, Datenbankverbindungen usw.

    • Fehlerbehandlung: Flask-Anwendungen können Fehler, die in HTTP-Anfragen auftreten, wie 404-Fehler, 500-Fehler usw., durch die Registrierung von Fehlerbehandlungsfunktionen behandeln.

    • Erweiterungsverwaltung: Flask-Anwendungen können die Anwendungsfunktionalität erhöhen, indem sie Erweiterungsobjekte registrieren, z. B. Datenbankverbindungen, Caching, E-Mail-Versand usw.

    • Anwendung starten: Starten Sie die Anwendung über die Ausführungsmethode, damit sie HTTP-Anfragen empfangen kann.

    Das Anwendungsmodul ist eines der Kernmodule der Flask-Anwendung. Es ist für die Verwaltung des Lebenszyklus der gesamten Anwendung verantwortlich und ein wichtiger Bestandteil der Flask-Entwicklung Webanwendungen.

    [Beispiel] Das Folgende ist ein einfaches Flask-Anwendungsbeispiel, das zeigt, wie Sie mit dem Anwendungsmodul ein Flask-Anwendungsobjekt erstellen, Routing- und Anzeigefunktionen registrieren, die Anwendung konfigurieren usw.

    from flask import Flask, render_template
    app = Flask(__name__)
    # 配置应用程序
    app.config['DEBUG'] = True
    app.config['SECRET_KEY'] = 'your_secret_key'
    # 注册路由和视图函数
    @app.route('/')
    def index():
        return 'Hello, World!'
    @app.route(&#39;/user/<name>&#39;)
    def user(name):
        return &#39;Hello, %s!&#39; % name
    @app.route(&#39;/hello/&#39;)
    @app.route(&#39;/hello/<name>&#39;)
    def hello(name=None):
        return render_template(&#39;hello.html&#39;, name=name)
    # 启动应用程序
    if __name__ == &#39;__main__&#39;:
        app.run()
    Nach dem Login kopieren

    Code-Erklärung:

    • 在上面的示例中,我们首先导入了 Flask 类和 render_template 函数。然后创建了一个 Flask 应用程序对象,使用了 __name__ 作为应用程序的名称。接着配置了应用程序的一些基本属性,包括调试模式和密钥等。

    • 然后使用 @app.route() 装饰器来注册 URL 路由和视图函数之间的映射关系。我们定义了三个视图函数,分别对应不同的 URL 地址,可以返回不同的响应内容。其中 /hello//hello/<name> 两个路由对应的是同一个视图函数,使用了 Flask 支持的多路由规则。

    • 最后使用 app.run() 方法启动了应用程序,使其可以接收 HTTP 请求。

    • 注意,在开发过程中,我们通常不会将 Flask 应用程序对象的 run() 方法直接放在程序的主体代码中,而是使用一个单独的脚本来启动应用程序,如:

    if __name__ == &#39;__main__&#39;:
        app.run()
    Nach dem Login kopieren

    四、路由模块

    路由模块是 Flask 应用程序的核心组成部分之一,它实现了 URL 路由和视图函数之间的映射关系。在 Flask 中,我们可以通过定义路由模块来为应用程序添加不同的路由规则,使得应用程序可以响应不同的 URL 请求。

    在 Flask 中,可以使用装饰器来定义路由模块。常用的装饰器包括:

    • @app.route(rule, options):定义路由规则和处理函数之间的映射关系。其中 rule 参数表示路由规则,options 参数表示路由的配置选项。

    例如,下面的示例定义了一个路由规则,用于处理 /hello URL 请求,并返回一个包含字符串的响应:

    from flask import Flask
    app = Flask(__name__)
    @app.route(&#39;/hello&#39;)
    def hello():
        return &#39;Hello, World!&#39;
    Nach dem Login kopieren
    • @app.before_request:在每个请求被处理之前执行的函数。通常用于执行一些预处理操作,例如验证用户的登录状态、设置全局变量等。

    例如,下面的示例定义了一个 before_request 函数,用于在处理请求之前打印请求的 HTTP 方法和 URL:

    from flask import Flask, request
    app = Flask(__name__)
    @app.before_request
    def log_request():
        print(f&#39;Request: {request.method} {request.url}&#39;)
    Nach dem Login kopieren
    • @app.after_request:在每个请求被处理之后执行的函数。通常用于执行一些后处理操作,例如添加响应头信息、记录日志等。

    例如,下面的示例定义了一个 after_request 函数,用于在处理请求之后添加一个名为 X-My-Header 的响应头:

    from flask import Flask
    app = Flask(__name__)
    @app.after_request
    def add_header(response):
        response.headers[&#39;X-My-Header&#39;] = &#39;Hello, World!&#39;
        return response
    Nach dem Login kopieren
    • @app.errorhandler:处理指定错误码的异常,例如 404 错误、500 错误等。可以定义多个不同的错误处理函数,以处理不同的异常情况。

    例如,下面的示例定义了一个 404 错误处理函数,用于处理访问不存在的 URL 时的异常情况:

    from flask import Flask, render_template
    app = Flask(__name__)
    @app.errorhandler(404)
    def page_not_found(e):
        return render_template(&#39;404.html&#39;), 404
    Nach dem Login kopieren

    在上面的示例中,我们定义了一个 page_not_found() 函数,并使用 @app.errorhandler(404) 装饰器将其注册为处理 404 错误的函数。在处理 404 错误时,Flask 会调用该函数,并将异常对象作为参数传入。函数返回一个包含错误信息的响应,并将 HTTP 状态码设置为 404

    总之,路由模块是 Flask 应用程序的重要组成部分,它可以通过不同的装饰器实现请求预处理、响应后处理、错误处理等功能。下面是一个完整的 Flask 路由模块的示例:

    from flask import Flask, request, render_template
    app = Flask(__name__)
    # 请求预处理函数
    @app.before_request
    def log_request():
        print(f'Request: {request.method} {request.url}')
    # 路由规则和处理函数
    @app.route('/')
    def index():
        return 'Hello, World!'
    @app.route('/hello')
    def hello():
        return 'Hello, World!'
    @app.route('/hello/<name>')
    def hello_name(name):
        return f'Hello, {name}!'
    # 响应后处理函数
    @app.after_request
    def add_header(response):
        response.headers['X-My-Header'] = 'Hello, World!'
        return response
    # 错误处理函数
    @app.errorhandler(404)
    def page_not_found(e):
        return render_template('404.html'), 404
    # 启动应用程序
    if __name__ == &#39;__main__&#39;:
        app.run()
    Nach dem Login kopieren

    在上面的示例中,我们定义了一个 Flask 应用程序,并使用 @app.route 装饰器定义了三个路由规则和处理函数:

    • / URL 请求将会调用 index() 函数,并返回一个字符串 'Hello, World!'。

    • /hello URL 请求将会调用 hello() 函数,并返回一个字符串 'Hello, World!'。

    • /hello/<name> URL 请求将会调用 hello_name(name) 函数,并返回一个包含 name 参数的字符串 'Hello, {name}!'。

    我们还使用了 @app.before_request 装饰器定义了一个请求预处理函数 log_request(),用于在每个请求被处理之前打印请求的 HTTP 方法和 URL

    同时,我们还使用了 @app.after_request 装饰器定义了一个响应后处理函数 add_header(response),用于在每个请求被处理之后添加一个名为 X-My-Header 的响应头。

    最后,我们使用 @app.errorhandler 装饰器定义了一个 404 错误处理函数 page_not_found(e),用于处理访问不存在的 URL 时的异常情况。

    整个路由模块的代码非常简单明了,通过 Flask 提供的装饰器可以轻松地定义路由规则和处理函数,实现不同 URL 请求的响应。

    五、视图模块

    在 Flask 中,视图模块用于处理请求并生成响应,通常由视图函数来实现。视图函数负责处理一个或多个 URL 请求,并返回一个响应对象。响应对象可以是纯文本、HTML、JSON、图像等。

    下面是一个简单的 Flask 视图模块的示例:

    from flask import Flask, request, jsonify
    app = Flask(__name__)
    # 视图函数
    @app.route('/hello')
    def hello():
        name = request.args.get('name', &#39;World&#39;)
        return f'Hello, {name}!'
    @app.route('/json')
    def json():
        data = {'message': 'Hello, World!'}
        return jsonify(data)
    # 启动应用程序
    if __name__ == &#39;__main__&#39;:
        app.run()
    Nach dem Login kopieren

    在上面的示例中,我们定义了两个视图函数:

    • hello() 函数处理 /hello URL 请求,使用 request.args.get() 方法获取请求参数中的 name 参数(默认为 &#39;World&#39;),并将其插入到响应字符串中返回给客户端。

    • json() 函数处理 /json URL 请求,生成一个包含 message 属性的字典对象,然后使用 Flask 提供的 jsonify() 函数将其转换为 JSON 格式的响应对象返回给客户端。

    启动 Flask 应用程序后,可以在浏览器中访问 /hello/json URL 来测试视图函数的效果。

    视图函数是 Flask 应用程序的核心组成部分,可以通过不同的方式生成响应,如使用模板引擎渲染 HTML 页面、返回纯文本或 JSON 数据等。视图函数还可以接受请求参数,通过 request 对象获取请求数据,并根据请求参数生成相应的响应。

    六、模板模块

    在 Flask 中,模板模块用于生成动态的 HTML 页面或其他类型的文档。Flask 支持多种模板引擎,如 Jinja2、Mako、Mustache 等,其中 Jinja2 是最常用的模板引擎之一。

    下面是一个简单的 Flask 模板模块的示例,使用 Jinja2 模板引擎渲染一个 HTML 页面:

    from flask import Flask, render_template
    app = Flask(__name__)
    # 路由规则和视图函数
    @app.route('/')
    def index():
        return render_template('index.html', name=&#39;World&#39;)
    # 启动应用程序
    if __name__ == &#39;__main__&#39;:
        app.run()
    Nach dem Login kopieren

    在上面的示例中,我们定义了一个路由规则 /,并使用 render_template() 函数将模板文件 index.html 渲染为 HTML 页面,其中传递了一个名为 name 的变量值为 &#39;World&#39;

    下面是 index.html 模板文件的示例:

    <!DOCTYPE html>
    <html>
      <head>
        <title>Hello, {{ name }}!</title>
      </head>
      <body>
        <h2>Hello, {{ name }}!</h2>
      </body>
    </html>
    Nach dem Login kopieren

    代码讲解:

    • 在上面的示例中,使用了 Jinja2 模板引擎的语法 {{ name }},它将在渲染模板时被替换为 render_template() 函数中传递的 name 变量的值。

    • 启动 Flask 应用程序后,访问根 URL / 将会返回一个包含 Hello, World! 的 HTML 页面。

    • 模板模块是 Flask 应用程序的重要组成部分,它可以实现动态生成各种类型的文档,如 HTML 页面、JSON 数据、CSV 文件等。在 Flask 中,使用模板引擎可以方便地将数据和 HTML 页面进行分离,实现更加清晰和易于维护的代码结构。

    七、数据库模块

    在 Flask 应用程序中,通常需要使用数据库来存储和管理数据。Flask 提供了多种数据库模块的支持,如 SQLAlchemyPeeweeMongoDB 等。

    下面以 SQLAlchemy 为例,介绍如何在 Flask 应用程序中使用数据库模块。

    1)安装 SQLAlchemy

    使用 pip 安装 SQLAlchemy:

    pip install SQLAlchemy
    Nach dem Login kopieren

    2)配置数据库连接

    在 Flask 应用程序中,需要配置数据库连接,包括数据库类型、主机名、端口号、数据库名、用户名和密码等。可以使用 Flask 应用程序的配置对象 app.config 来存储这些配置信息,如下所示:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    app = Flask(__name__)
    app.config[&#39;SQLALCHEMY_DATABASE_URI&#39;] = &#39;postgresql://user:password@localhost/mydatabase&#39;
    db = SQLAlchemy(app)
    Nach dem Login kopieren

    在上面的示例中,我们使用 SQLAlchemy 模块创建了一个数据库连接 db,并将其关联到 Flask 应用程序对象 app 上。

    3)定义数据库模型

    使用 SQLAlchemy 模块可以方便地定义数据库模型,例如下面的示例定义了一个简单的用户模型:

    from datetime import datetime
    from sqlalchemy import Column, Integer, String, DateTime
    class User(db.Model):
        id = Column(Integer, primary_key=True)
        name = Column(String(50), nullable=False)
        email = Column(String(120), unique=True, nullable=False)
        created_at = Column(DateTime, default=datetime.now)
    Nach dem Login kopieren

    在上面的示例中,我们使用 SQLAlchemy 提供的 Column 类定义了三个列:idnameemailcreated_at。其中,id 是主键列,nameemail 是字符串列,created_at 是日期时间列。

    4)数据库操作

    使用 SQLAlchemy 模块可以方便地执行数据库操作,例如下面的示例:

    # 创建数据库表
    db.create_all()
    # 插入数据
    user = User(name=&#39;Alice&#39;, email=&#39;alice@example.com&#39;)
    db.session.add(user)
    db.session.commit()
    # 查询数据
    users = User.query.all()
    # 更新数据
    user.name = &#39;Bob&#39;
    db.session.commit()
    # 删除数据
    db.session.delete(user)
    db.session.commit()
    Nach dem Login kopieren

    在上面的示例中,我们使用 db.create_all() 创建数据库表,使用 db.session.add() 插入数据,使用 User.query.all() 查询数据,使用 db.session.commit() 提交事务。还可以使用 db.session.query() 查询数据,使用 db.session.filter() 过滤数据,使用 db.session.order_by() 排序数据等。

    数据库模块是 Flask 应用程序的核心组成部分之一,它可以方便地实现数据的存储和管理,为 Web 应用程序提供强大的数据支持。在使用数据库模块时,需要注意数据的安全性和可靠性,如防止 SQL 注入攻击、处理事务、使用数据库索引等。

    八、表单模块

    表单模块是 Flask 应用程序中常用的组件之一,它可以方便地实现用户输入的数据验证和处理。在 Flask 中,表单模块通常使用 WTForms 库实现。

    下面介绍如何在 Flask 应用程序中使用表单模块。

    1)安装 WTForms

    使用 pip 安装 WTForms:

    pip install WTForms
    Nach dem Login kopieren

    2)创建表单类

    在 Flask 应用程序中,需要定义一个表单类来描述需要接收的数据和对数据进行验证的规则。例如下面的示例定义了一个简单的用户注册表单:

    from wtforms import Form, StringField, PasswordField, validators
    class RegistrationForm(Form):
        name = StringField(&#39;Name&#39;, [validators.Length(min=4, max=25)])
        email = StringField(&#39;Email&#39;, [validators.Email()])
        password = PasswordField(&#39;Password&#39;, [
            validators.DataRequired(),
            validators.EqualTo(&#39;confirm_password&#39;, message=&#39;Passwords must match&#39;)
        ])
        confirm_password = PasswordField(&#39;Confirm Password&#39;)
    Nach dem Login kopieren

    在上面的示例中,我们使用 WTForms 提供的 Form 类定义了一个表单类 RegistrationForm,并定义了三个字段:nameemailpassword。对于每个字段,我们使用不同的验证器进行验证,例如 validators.Lengthvalidators.Emailvalidators.EqualTo 等。

    3)在视图函数中使用表单

    在 Flask 应用程序中,需要使用表单类来接收用户提交的数据,然后对数据进行验证和处理。例如下面的示例定义了一个处理用户注册的视图函数:

    from flask import render_template, request
    from .forms import RegistrationForm
    @app.route(&#39;/register&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])
    def register():
        form = RegistrationForm(request.form)
        if request.method == &#39;POST&#39; and form.validate():
            # 处理用户注册数据
            return &#39;Registration successful!&#39;
        return render_template(&#39;register.html&#39;, form=form)
    Nach dem Login kopieren

    在上面的示例中,我们使用表单类 RegistrationForm 来接收用户提交的数据,然后在视图函数中使用 request.form 方法获取表单数据,并使用 form.validate() 方法验证表单数据是否合法。如果表单数据验证通过,则进行用户注册操作,并返回注册成功的消息。

    4)渲染表单模板

    在 Flask 应用程序中,需要使用模板引擎来渲染表单模板,并将表单类传递给模板。例如下面的示例定义了一个注册表单模板:

    <form method="POST">
        {{ form.name.label }} {{ form.name }}
        {{ form.email.label }} {{ form.email }}
        {{ form.password.label }} {{ form.password }}
        {{ form.confirm_password.label }} {{ form.confirm_password }}
        <button type="submit">Register</button>
    </form>
    Nach dem Login kopieren

    在上面的示例中,我们使用表单类 RegistrationForm 中的字段 nameemailpasswordconfirm_password 渲染表单模板,并使用 form.name.labelform.name 等属性来获取标签和输入框的 HTML 代码。

    表单模块是 Flask 应用程序中常用的组件之一。

    九、扩展模块

    在 Flask 应用程序中,扩展模块可以帮助我们更方便地实现某些功能或解决某些问题。下面介绍一些常用的 Flask 扩展模块。

    Flask-WTF:Flask-WTF 是一个 WTForms 的 Flask 扩展,它为 Flask 应用程序提供了更方便的表单处理和 CSRF 保护等功能。使用 Flask-WTF 可以大大简化表单处理的代码,同时提高应用程序的安全性。

    Flask-Login:Flask-Login 是一个用于用户身份验证和管理的 Flask 扩展,它提供了用户登录和登出等功能,还可以方便地管理用户状态和权限等信息。使用 Flask-Login 可以大大简化用户身份验证和管理的代码,同时提高应用程序的安全性。

    Flask-SQLAlchemy:Flask-SQLAlchemy 是一个 SQLAlchemy 的 Flask 扩展,它提供了对关系型数据库的支持,例如 MySQL、PostgreSQL 和 SQLite 等。使用 Flask-SQLAlchemy 可以方便地进行数据库操作,例如创建表、插入数据和查询数据等。

    Flask-Cache:Flask-Cache 是一个缓存的 Flask 扩展,它提供了缓存功能,可以将应用程序中的一些计算结果缓存起来,以减少计算量和响应时间。使用 Flask-Cache 可以提高应用程序的性能和响应速度。

    Flask-Mail:Flask-Mail 是一个邮件发送的 Flask 扩展,它提供了发送邮件的功能,可以方便地发送邮件给用户或管理员等。使用 Flask-Mail 可以大大简化发送邮件的代码,同时提高应用程序的交互性和用户体验。

    Das obige ist der detaillierte Inhalt vonWie installiere und verwende ich das Python Flask-Framework-Modul?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage