jobweb项目中所遇到知识点(Flask)

jobweb项目中所遇到知识点

  1. sqlalchemy . Customizing DDL

    数据定义语言(DDL)。发出时,将调用预定的操作顺序,并无条件创建DDL以创建每个表,包括所有约束和与其关联的其他对象。对于需要特定于数据库的DDL的更复杂的方案,SQLAlchemy提供了两种技术,可用于根据任何条件添加任何DDL,包括表的标准生成或单独添加。

    官方文档—>文档

  2. Flask扩展系列-用户会话管理

    • Flask-Login 模块

      • flask_login 是web开发框架flask的一个插件,可以非常方便的管理用户对网站的访问

      • user 类

      • # 安装 包
        pip3  install flask-login
        
        
        
        # 初始化 app
        from flask import Flask, render_template, redirect, request
        from flask_login import \
            (LoginManager,
             current_user,
             UserMixin,
             login_required,
             login_user,
             logout_user
             )
        
        app = Flask(__name__)
        app.config['SECRET_KEY'] = 'ijaswe'
        
        login_manager = LoginManager()
        login_manager.init_app(app)
        login_manager.login_view = '/login'
        login_manager.session_protection = 'strong'   # 防止恶意用户篡改 cookies
        
        
        # user 类
        
        user_dict = {}
        
        class User(UserMixin):
            def load_by_user_id(self, user_id):
                """
                在实际项目中,这个方法应该从数据库中根据user_id来查询用户信息
                为了演示方便,我这里省略了从数据库查询数据的过程
                如果数据库中没有user_id这个用户,你应该返回False
                :param user_id: 用户唯一标识
                :return: 
                """
                self.user_id = 1
                self.username = user_dict.get(self.user_id)
                return True
        
            def get_id(self):
                return self.user_id
        
    • login_required

      • @login_required 会做用户登录检测,如果没有登录要方法此视图函数,就被跳转到 login 接入点( endpoint )
      • current_user 是当前登录者,是 User 的实例,是 Flask-Login 提供全局变量( 类似于全局变量 g
    • 使用 Flask-WTF

      • Flask表单:表单数据的验证与处理
      • 文档------》》》flask表单
    • Share() 基于jinja2模板创建社交共享组件

  3. Faker 类

    Python中有一个专门生成各类假数据的库:Faker

    使用faker 构建测试数据库

  4. CKEditor(app)

    是一个非常优秀的 Web 服文本编辑器,提供了非常多的功能和丰富的文档

  5. Moment(app)

    用于处理日期/时间的 Python 库,设计灵感同样是来源于 moment.jsrequests

  6. get_or_404 方法

    比如:meth: ’ get ‘,但如果没有找到,就会以404终止,而不是返回’ ’ None ’ '。"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zS6xg1IM-1632910701211)( http://qny.jkraise.top/project%E7%9F%A5%E8%AF%86%E7%82%B9.assets/1603206304293.png~01style)]

  1. 解决 mysql5.7.5之后sql_mode默认值是"only_full_group_by",不能执行group_by查询

​ mysql 中sql_mode 设置win 10 , MYSQL8以上已经取消了 NO_AUTO_CREATE_USER,sql_mode中不能包含这 个。

​ 在mysql.ini 中设置

  1. 用户类 UserMinxin 类,

​ 文档—> UserMixin

  1. form enctype 属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgnezZgk-1632910701213)( http://qny.jkraise.top/project%E7%9F%A5%E8%AF%86%E7%82%B9.assets/1603242615042.png~01style)]

  1. csrf 保护

    要对所有视图函数启用 CSRF 保护,你需要启用 CsrfProtect 模块:

from flask_wtf.csrf import CsrfProtect

CsrfProtect(app)
  1. @property 主要是让password字段无法直接读取

​ @password.setter 修改用户的password 字段 (修改密码)

  1. UploadSet

​ flask可以实现上传文件和下载文件的基本功能,但如果想要健壮的功能,使用flask_uploads插件是十分方便的。

UploadSet对象的主要方法是save,该方法必须传入werkzeug.FileStorage对象作为参数,然后检查文件名是否合法,将其转换;检查文件的扩展名是否允许,不允许抛出UploadNotAllowed()错误;调用resolve_conflict方法解决文件名冲突问题;然后将目录和文件名拼接成绝对路径保存在目录下,最后返回文件名; 
  1. patch_request_class

    • 限制文件大小

      导入patch_request_class()函数,传入应用实例和大小(默认为16MB),比如:

      patch_request_class(app, 32 * 1024 * 1024 ) 
      
  2. Flask abort 函数

    1. 用于提前退出 一个请求,并用指定的错误码 返回

      flask.abort(status, *args, **kwargs) 
      abort(404)
      
Bootstrap
  1. 用于响应式不局,移动设备优先的web 项目架构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask 项目中,`self` 是指代类的实例对象的引用。在类的方法中,`self` 作为第一个参数传递,用于引用该实例对象自身。 在 Flask 中,通常会定义一个类来表示一个视图函数。这个类需要继承自 Flask 提供的基类(如 `flask.views.View` 或 `flask_restful.Resource`),并且需要定义一些方法来处理 HTTP 请求。 当请求到来时,Flask 会创建这个类的一个实例,并调用相应的方法来处理请求。在这些方法中,我们可以通过 `self` 来引用这个实例对象,并使用它来访问实例的属性或调用其他方法。 以下是一个示例,展示了在 Flask 项目中如何使用 `self`: ```python from flask import Flask, request app = Flask(__name__) class MyView: def __init__(self): self.message = "Hello, Flask!" def get(self): return self.message def post(self): data = request.get_json() self.message = data.get("message") return "Message updated" view = MyView() @app.route("/", methods=["GET", "POST"]) def index(): if request.method == "GET": return view.get() elif request.method == "POST": return view.post() if __name__ == "__main__": app.run() ``` 在这个示例中,我们定义了一个名为 `MyView` 的类,它有一个属性 `message` 和两个方法 `get` 和 `post`。在 `index` 视图函数中,我们创建了一个 `MyView` 的实例 `view`,在 GET 请求中调用 `view.get()` 方法,在 POST 请求中调用 `view.post()` 方法。通过 `self`,我们可以在方法中访问实例的属性,如 `self.message`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值