1. 初始化
app是Flask类的一个对象
from flask import Flask
app = Flask(__name__)
路由和视图函数
定义路由在这里插入代码片
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
如果是地址后面有可变部分,则用下面的代码定义:
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
3.启动服务器
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
if __name__ == '__main__':
app.run(debug=True)
安装 manager启动服务器的方式
正常的启动方式 app.run(debug=True) 改成 manager.run()
引入Manager, 加上
- from flask.ext.script import Manager
- manager = Manager(app)
from flask import Flask
from flask.ext.script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
if __name__ == '__main__':
manager.run()
模块名字
redirect 重定向响应是没有页面文档
from flask import redirect
@app.route('/')
def index():
return redirect('http://www.example.com')
abort 函数生成,用于处理错误
from flask import abort
@app.route('/user/<id>')
def get_user(id):
user = load_user(id)
if not user:
abort(404)
return '<h1>Hello, %s</h1>' % user.name
make_response 可以返回Response对象
from flask import make_response
@app.route('/')
def index():
response =make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer', '42')
return response
静态页面的模板应用
- render_template
- block
- extends
渲染模板 render_template
from flask import Flask
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
if __name__ == '__main__':
app.run()
简单的模板前端判断
{% if user %}
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}
渲染数组
<ul>
{% for comment in comments %}
<li>{{ comment }}</li> {% endfor %}
</ul>
宏类似于 Python 代码中的函数
{% macro render_comment(comment) %} <li>{{ comment }}</li>
{% endmacro %}
<ul>
{% for comment in comments %}
{{ render_comment(comment) }} {% endfor %}
</ul>
基模板 block 标签定义的元素可在衍生模板中修改
<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} - My Application</title> {% endblock %}
</head>
<body>
{% block body %}
{% endblock %} </body>
</html>
引用模板 super() 获取原来的内容
{% extends "base.html" %}
{% block title %}Index{% endblock %} {% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %} <h1>Hello, World!</h1>
{% endblock %}
引入 bootstrap
pip install flask-bootstrap
初始化
from flask.ext.bootstrap import Bootstrap
bootstrap = Bootstrap(app)
使用Flask-SQLAlchemy管理数据库 db对象是SQLAlchemy类的实例
from flask.ext.sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
定义Role和User模型,tablename是数据库中使用的表名,db.Column类构造函数的第一个参数是数据库列和模型属性的类型
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64),unique=True)
def __repr__(self):
return '<Role %r>' % self.name
class User(db.Model):
__teblename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True,index=True)
def __repr__(self):
return '<User %r>' % self.username
表示一对多关系
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64),unique=True)
users = db.relationship('User',backref='role')
def __repr__(self):
return '<Role %r>' % self.name
class User(db.Model):
__teblename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True,index=True)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))