1.Flask配置文件之from_object篇
app = Flask(__name__)
app.config.from_object(Flask.config[config_name])
Flask.config[config_name].init_app(app)
#app是通过Flask创建的,app的config方法肯定是从Flask类里面获得的
查看原码可以发现app的config属性的定义
self.config=self.make_config(instance_relative_config)
make_config(instance_relative_config)这个函数定义的内容
def make_config(self,instance_relative=False):
return self.config_class(root_path,self.default_config)
#最终返回的是一个config_class方法,它是一个类对象,这个类对象是从Config类而来。
#这种方式的效果是直接从文件中加载对项目的配置
2.flask第三方扩展之Moment模块
Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化、日期解析等功能。
它支持在浏览器和NodeJS两种环境中运行。此类库能够 将给定的任意日期转换成多种不同的格式,具有
强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。另外,它也支持多种语言,你可以
任意新增一种 新的语言包。
#首先初始化Flask-Moment
from flask.ext.moment import Moment
moment = Moment(app)
在base.html模板种的head标签中导入moment.js,jquery.js
<html>
<head>
{
{ moment.include_jquery() }}
{
{ moment.include_moment() }}
<!--使用中文,默认是英语的-->
{
{ moment.lang("zh-CN") }}
</head> <body> ... </body> </html>
使用Flask-moment
from flask import render_template
from datetime import date
@main.route('/')
def index ():
return render_template('index.html', time = date(1994,8,29))
#在模板中渲染
<p>现在时间时: {
{ moment().format('YYYY年M月D日, h:mm:ss a') }}.</p>
<p>已经过去了: {
{ moment().fromTime(time) }}.</p>
<p>{
{ moment().calendar() }}.</p>
结果:
现在时间时: 2015年4月22日, 10:06:33 上午.
已经过去了: 21年内.
今天上午10点06.
3.flask扩展之flask_login模块
这里将详细讲述flask_login模块的使用流程和机制
1.使用前首先要配置和初始化
from flask_login import LoginManager
login_manage=LoginManager()
def init_ext(app):
login_manage.init_app(app)
#这里要指定登陆函数的端口,以方便login跟踪操作
login_manage.login_view='main.login'
这个配置的是当给视图加@login_required的时候非登陆用户操作出现的message
login_manage.login_message='需要登陆才能执行此操作'
login_manage.login_message_category='info'
#设置对session的保护等级
login_manage.session_protection='strong'
2.配置完成后,我们要在模型中实现一个继承和回调
from flask_login import UserMixin
from App.extensions import login_manage
#如果不继承UserMixin是无法满足使用flask_login的条件的
class User(db.Model,UserMixin):
__tablename__='user'
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(10),unique=True)
password=db.Column(db.String(128))
sex=db.Column(db.Boolean,default=1)
email=db.Column(db.String(100),unique=True)
#这个回调是用来接收一个用户id的时候返回一个用户对象
#如果没有会返回None但是不会报错
@login_manage.user_loader
def load_user(uid):
return User.query.get(int(uid))
3.好了,基本配置已经完成了,现在我们来看看flask_login怎么使用
#蓝本(视图函数)当中
from flask_login import current_user,login_user,logout_user,login_required
main=Blueprint('main',__name__)
@main.route('/login/',methods=['GET','POST'])
def login():
form=Login()
if form.validate_on_submit():
u = User.query.filter(User.username==form.username.data).first()
if not u:
return '用户不存在'
elif not u.password==form.password.data:
return '密码输入有误'
#直接通过此方法可以实现用户的登入,其实就是将用户的id存到session当中
login_user(u)
#如果需要实现记住我,请在form表单里添加相关字段
return render_template('success.html')
return render_template('login.html',form=form)
@main.route('/logout/',methods=['GET','POST'])
def logout():
#此函数的作用是实现用户的登出,其实就是从session中删除用户的id
logout_user()
return redirect(url_for('main.main_s'))
@main.route('/picture/')
#此装饰器限制的是一些只有登陆才能进行的操作,如果没有登陆,会重定向到用户登陆页面
#同时将提示信息存入flash当中
@login_required
def picture():
return render_template('picture.html')
picture.html中
#如果是非登陆用户执行越权限操作被传送过来,想显示相关flash内容
#这里是从消息中取出对应flash