flask web开发注意事项

一、连接数据库

  1. 连接mysql的时候需要添加autocommit=True,否则当修改数据库的时候,数据库数据已经发生变化,但是flask还是读取修改前的数据。
  2. 中间件 middleware
    request
    当Flask应用处理请求时,它会根据从WSGI服务器收到的环境创建一个Request对象.因为工作者(取决于服务器的线程,进程或者协程)一次只能处理一个请求,所以在该请求期间请求数据可被认为是该工作者的全部数据。Flask对此的术语为本地请求before_request,teardown_request
  3. g:同一个请求中 共享数据
    from flask import g
    场景:验证用户信息
    可以在同一请求之间共享g的内容,相当于实现了这个请求的一个全局变量

    #DB信息
    db_config = {
        'host' : "10.1.241.42",
        'user' : "root",
        'password' : "123456",
        'database' : "ops",
        'charset' : "utf8mb4",
        'port' : 33306,
        'autocommit' : True
    }
    
    #全局数据库连接
    def link_db():
        if 'db' not in g:
            con = pymysql.connect(**db_config)
            return con
    
    @app.before_request
    def before_request():
            g.db = link_db()
    
    @app.teardown_request
    def teardown_request(exception):
        db = g.pop('db', None)
        if db is not None:
            db.close()

    4.session
    用来记录用户会话信息

    from flask import Flask, session, request

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'sfoowff'

    @app.route('/login/')
    def login():
    username = request.args.get('username')
    pwd = request.args.get('pwd')
    if username and pwd:
    session['user'] = username
    return '登陆成功'
    return '账号密码不能为空'

    @app.route('/logout/')
    def logout():
    session.pop('user', None)
    return '登出'

    5. 在Flask中使用requests库发送请求时,可以通过data和json参数来传递参数。

    data参数用于传递表单数据,这些数据会被编码为表单形式的数据。您可以将一个字典作为data参数传递给requests.post()或requests.put()等方法。
    python
    复制
    import requests

    url = 'http://example.com/endpoint'
    data = {
    'key1': 'value1',
    'key2': 'value2'
    }

    response = requests.post(url, data=data)

    print(response.text)
    在上述示例中,data参数接收一个字典类型的数据,requests.post()方法会将其编码为表单数据发送给目标URL。

    json参数用于传递JSON数据。您可以将一个字典作为json参数传递给requests.post()或requests.put()等方法。json参数会自动将数据转换为JSON格式,并设置请求头部的Content-Type为application/json。
    python
    复制
    import requests

    url = 'http://example.com/endpoint'
    data = {
    'key1': 'value1',
    'key2': 'value2'
    }

    response = requests.post(url, json=data)

    print(response.text)
    在上述示例中,json参数接收一个字典类型的数据,requests.post()方法会将其转换为JSON数据并发送给目标URL。

    根据您的需求,选择适合您的数据格式的参数(data或json)来发送请求。如果需要发送表单数据,使用data参数;如果需要发送JSON数据,使用json参数。

    6. 使用数据库链接池来操作数据库链接

    6.1 pycharm无法导入DBUtils

  4. 下面的方式在DBUtils3.02版本无法导入
    from DBUtils.PooledDB import PooledDB
    (注意3.02版本只支持py3.5-3.10)
    改为下面:
    from dbutils.pooled_db import PooledDB
  5. 6.2 static 文件引用的时候要使用 url_for('static',filename='xx.jpg'),这样的话就算静态文件url前缀变化了,这里也会自动变化。

6.3 配置settings.py和localsettings.py的时候,变量要大写,虽然不是强制的,但有可能导入配置的时候无法识别变量,所以还是按照约定俗成的写成大写变量。

6.4

HTML placeholder
placeholder属性指定文本框的占位符,当用户还没有输入值的时候,向用户显示默认的描述性说明或提示信息,为用户填写表单提供提示和额外指导。

基本的文本输入框, type 属性值为search、url、tel、email、number 的文本输入框,以及 textarea 等其他类型的文本输入框都支持 placeholder属性。

<input type="url" name="site" id="site" placeholder="http://www.waibo.wang/">
placeholder属性中的文本会默认以浅灰色出现在文本框中。当用户开始在文本框中输入文本时,浅灰色文本就会自动消失。如果用户在没有输入任何信息的情况下将焦点移开,浅灰色文本又会再次出现。

当一个文本框同时拥有 placeholder属性和非空的 value 属性时,value 的属性值会显示在文本框中。

由于 placeholder属性的值是不会被发送到服务器上,因此,在提交表单时,如果文本框中的值与 placeholder属性的值相同,浏览器会阻止提交表单,并显示警告信息。

HTML form相关配置参考:https://blog.csdn.net/a950809/article/details/78462565

6.5

在Python中,使用相对导入(使用.)来导入包或模块是允许的,但是有一些限制和要求。

首先,相对导入只能在包内部使用,而不能在独立的脚本文件中使用。相对导入是用来引用同一包中的其他模块或子包的。如果您在脚本文件中使用相对导入,会出现ImportError: attempted relative import with no known parent package错误。

其次,相对导入需要在包的__init__.py文件中设置正确的包结构。在包的__init__.py文件中,您需要使用from .或from ..等相对导入语句来定义包的内部结构。

在Python中,from .from ..是用于相对导入的语法。

  • from .表示从当前包(当前模块所在的包)中导入模块或子包。
  • from ..表示从当前包的父包中导入模块或子包。

这些相对导入语法用于在包内部引用其他模块或子包,而不依赖于绝对路径。相对导入通常用于构建模块和包之间的相互引用关系,以便更好地组织和管理代码。

请注意以下几点:

  1. 相对导入只能在包内部使用,而不能在独立的脚本文件中使用。在独立脚本文件中,应使用绝对导入或添加包标识符来导入模块。
  2. 相对导入需要在包的__init__.py文件中设置正确的包结构。在包的__init__.py文件中,您需要使用from .from ..等相对导入语句来定义包的内部结构。
  3. 相对导入的使用可能会受到Python版本和模块的执行方式的影响。特别是在使用脚本文件执行模块时,相对导入可能会导致问题。因此,建议在包内部使用相对导入,而在独立脚本文件中使用绝对导入。

    在Python中,包(Package)和模块(Module)是组织和管理代码的两种主要方式。它们在功能和使用上有一些区别。

    1. 模块(Module):
      • 模块是一个包含Python代码的文件,以.py为扩展名。它可以包含变量、函数、类和可执行代码。
      • 模块通常用于封装一个特定功能的代码集合,可以被其他模块或脚本文件导入和使用。
      • 模块提供了一种组织和重用代码的方式,可以通过导入模块来访问其中的代码。
      • 您可以使用import语句导入模块,并使用模块名来访问其中定义的变量、函数和类。
    2. 包(Package):
      • 包是一个包含多个模块的目录,其中包含一个特殊的__init__.py文件来标识它为一个包。
      • 包允许将相关的模块组织在一起,形成一个逻辑上的代码集合。
      • 包提供了更高级别的命名空间,以防止模块名称冲突,并允许更好的代码组织和管理。
      • 您可以通过使用点号(.)来访问包中的模块和子包。例如,package.module表示访问包package中的模块module
      • 包中的__init__.py文件可以包含一些初始化代码,也可以定义导入时需要执行的内容。

    总结:

    • 模块是一个包含Python代码的文件,用于封装和重用代码。
    • 包是一个包含多个模块和子包的目录,用于组织和管理相关的代码。
    • 模块和包都可以通过导入来使用其中的代码,但包提供了更高级别的代码组织和命名空间。

    通过使用模块和包,您可以更好地组织和管理您的Python代码,并实现模块化和可重用性

版权声明:本文内容由互联网用户撰写,该文观点仅代表作者本人。本站爱分享仅提供分享服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请立马联系本站,本站将立刻删除。
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭