后端生成验证码
WTF的验证码需要访问google,国内进不去,建议自己使用pillow来生成。
pip install flask-wtf
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>
'''
闪现
#看源码可以知道使用session来实现的
#view.py:
flash('string','class')
#html:
{{ get_flashed_message(with_categories=False, category_filter=['error']) }}
#上述的with_categories参数的意义是,flash信息前是否需要写上类型,返回的值是('warning', '这是warning类型的flash')
日志
#日志的设置
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中打印日志
缓存
先安装redis和flask-caching
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)
在我们访问同一个网址的时候,如果已经访问过,可能会取本地缓存,建议结尾加随机数,"?ran="+Math.random()
跨域问题
就是通过js或ajax发起了不符合同源策略的http请求。同源是指协议、域名和端口都相同。
解决办法:
pip install flask-cors
cors = CORS()
cors.init_app(app=app, supports_credentials=True)