当前位置: 首页 > 工具软件 > flask-wtf > 使用案例 >

flask-wtf

堵昊焱
2023-12-01

WTF

  1. 后端生成验证码

    WTF的验证码需要访问google,国内进不去,建议自己使用pillow来生成。

  2. pip install flask-wtf

  3. FlaskForm

    #首先我们需要在相应的app中创建一个form.app,内容为:
    class UserForm(FlaskForm):
    	name = StringField(label='用户名', validators=[DataRequired(), EqualTo(), Length(), Regexp()])
        def validate_name(self, data):
            input_value = data.data
            if input_value == ' ':
                raise ValidationError('提交的内容不能为空格')
        
    #各个field:
    StringField
    PasswordField
    IntegerField
    DatetimeField
    #各个验证
    DataRequired()
    EqualTo()
    Length()
    Regexp()
    #文件有关
    fname = FileField()
    FileRequired()
    FileAllowed(['jpg','png','png'])
    icon = uform.fname.data
    #icon是filestorage类型
    
    #views.py:
    @bp.route('/', methods=['GET', 'POST'])
    def index():
        uform = UserForm()
        if uform.validate_on_submit():
            name = uform.name.data
            print(name)
            return '提交成功'
        return render_template('index.html', uform=uform)
    
    #index.html:
    '''
        <form action='' method=''>
          {{form.csrf_token}}
          {{form.name}}
          {{form.password}}
          <input type='submit' value=''/>
        </form>
        
    '''
    
  4. 闪现

    #看源码可以知道使用session来实现的
    #view.py:
    flash('string','class')
    #html:
    {{ get_flashed_message(with_categories=False, category_filter=['error']) }}
    #上述的with_categories参数的意义是,flash信息前是否需要写上类型,返回的值是('warning', '这是warning类型的flash')
    
  5. 日志

    #日志的设置
    logger = logging.getLogger('app')
    handler = logging.FileHandler("log.txt")
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    #只有设置了上面的才能将日志信息写到指定文件中
    #使用方式有两种:
    logger.warning('这是一个定义警告的日志')
    app.logger.warning('这是系统自带的日志')
    #上述的两个使用方式可以任选一个,当然区别在于,app.logger.warning()是会同时向terminal和log.txt中打印日志
    
  6. 缓存

    1. 先安装redis和flask-caching

    2. config = {
              'CACHE_TYPE': 'redis',
              'CACHE_REDIS_HOST': '127.0.0.1',
              'CACHE_REDIS_PORT': 6379
          }
      cache = Cache()
      cache.init_app(app,config)
      cache.set(key,value,timeout=second)
      cache.set_many([(key,value),(key,value),(key,value),...])
      cache.get(key)  --->value
      cache.get_many(key1,key2,...)
      cache.delete(key)
      cache.delete_many(key1,key2,...)
      cache.clear()
      @cache.cached(timeout=50)
      
    3. 在我们访问同一个网址的时候,如果已经访问过,可能会取本地缓存,建议结尾加随机数,"?ran="+Math.random()

  7. 跨域问题

    1. 就是通过js或ajax发起了不符合同源策略的http请求。同源是指协议、域名和端口都相同。

    2. 解决办法:

       pip install flask-cors
       cors = CORS()
       cors.init_app(app=app, supports_credentials=True)
    
 类似资料: