码迷,mamicode.com
首页 > 其他好文 > 详细

Flask快速玩框架

时间:2016-07-06 19:58:05      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

最近比较忙
快速玩Flask框架,为微博做些准备
part 1 python程序
  1. from flask import Flask, render_template, session, redirect, url_for, flash
  2. from flask_bootstrap import Bootstrap
  3. from flask_moment import Moment
  4. from datetime import datetime
  5. from flask_wtf import Form
  6. from wtforms import StringField, SubmitField
  7. from wtforms.validators import Required
  8. from flask_sqlalchemy import SQLAlchemy
  9. from flask_script import Manager
  10. import os
  11. basedir = os.path.abspath(os.path.dirname(__file__))
  12. app = Flask(__name__)
  13. #wtf表单验证
  14. app.config[‘SECRET_KEY‘] = ‘hard to guess string‘
  15. #数据库URL
  16. app.config[‘SQLALCHEMY_DATABASE_URI‘] = \
  17. ‘sqlite:///‘ + os.path.join(basedir, ‘data.sqlite‘)
  18. #每次请求结束后自动提交数据变动
  19. app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True
  20. bootstrap = Bootstrap(app)
  21. moment = Moment(app)
  22. db = SQLAlchemy(app)
  23. manager = Manager(app)
  24. #wtf表单类
  25. class NameForm(Form):
  26. name = StringField(‘What is your name?‘, validators=[Required()])
  27. submit = SubmitField(‘Submit‘)
  28. #数据库中的table类
  29. class Role(db.Model):
  30. __tablename__ = ‘roles‘
  31. id = db.Column(db.Integer, primary_key=True)
  32. name = db.Column(db.String(64), unique=True)
  33. users = db.relationship(‘User‘, backref=‘role‘, lazy=‘dynamic‘)
  34. def __repr__(self):
  35. return ‘<Role %r>‘ % self.name
  36. class User(db.Model):
  37. __tablename__ = ‘users‘
  38. id = db.Column(db.Integer, primary_key=True)
  39. username = db.Column(db.String(64), unique=True, index=True)
  40. role_id = db.Column(db.Integer, db.ForeignKey(‘roles.id‘))
  41. def __repr__(self):
  42. return ‘<User %r>‘ % self.username
  43. #主页
  44. @app.route(‘/‘, methods=[‘GET‘, ‘POST‘])
  45. def index():
  46. form = NameForm()
  47. if form.validate_on_submit():
  48. user = User.query.filter_by(username=form.name.data).first()
  49. if user is None:
  50. user = User(username=form.name.data)
  51. db.session.add(user)
  52. session[‘known‘] = False
  53. else:
  54. session[‘known‘] = True
  55. session[‘name‘] = form.name.data
  56. form.name.data = ‘‘
  57. return redirect(url_for(‘index‘))
  58. return render_template(‘user.html‘, form=form, name=session.get(‘name‘), known=session.get(‘known‘, False),
  59. current_time=datetime.utcnow())
  60. #404页
  61. @app.errorhandler(404)
  62. def page_not_found(e):
  63. return render_template(‘404.html‘), 404
  64. #500页
  65. @app.errorhandler(500)
  66. def internal_server_error(e):
  67. return render_template(‘500.html‘), 500
  68. #manager.run() 用于是服务器在命令行运行
  69. if __name__ == ‘__main__‘:
  70. app.run(debug=True)
  71. # manager.run()
part 2 基模板
主页面:
  1. <!-- 基于bootstrap/base.html的基模板 默认有导航栏 page——content可重写-->
  2. {% extends "bootstrap/base.html" %}
  3. <!-- 导入moment.js -->
  4. {% block scripts %}
  5. {{ super() }}
  6. {{ moment.include_moment() }}
  7. {% endblock %}
  8. {% block title %}Flasky{% endblock %}
  9. {% block head %}
  10. {{ super() }}
  11. <link rel="shortcut icon" href="{{ url_for(‘static‘, filename = ‘favicon.ico‘) }}"
  12. type="image/x-icon">
  13. <link rel="icon" href="{{ url_for(‘static‘, filename = ‘favicon.ico‘) }}"
  14. type="image/x-icon">
  15. {% endblock %}
  16. {% block navbar %}
  17. <div class="navbar navbar-inverse" role="navigation">
  18. <div class="container">
  19. <div class="navbar-header">
  20. <button type="button" class="navbar-toggle"
  21. data-toggle="collapse" data-target=".navbar-collapse">
  22. <span class="sr-only">Toggle navigation</span>
  23. <span class="icon-bar"></span>
  24. <span class="icon-bar"></span>
  25. <span class="icon-bar"></span>
  26. </button>
  27. <a class="navbar-brand" href="/">Flasky</a>
  28. </div>
  29. <div class="navbar-collapse collapse">
  30. <ul class="nav navbar-nav">
  31. <li><a href="/">Home</a></li>
  32. </ul>
  33. </div>
  34. </div>
  35. </div>
  36. {% endblock %}
  37. {% block content %}
  38. <!-- 弹出警告信息-->
  39. <div class="container">
  40. {% for message in get_flashed_messages() %}
  41. <div class="alert alert-warning">
  42. <button type="button" class="close" data-dismiss="alert">×</button>
  43. {{ message }}
  44. </div>
  45. {% endfor %}
  46. {% block page_content %}{% endblock %}
  47. </div>
  48. {% endblock %}
自定义错误页面:
  1. <!DOCTYPE html>
  2. {% extends "base.html" %}
  3. {% block title %}Flasky - Page Not Found{% endblock %}
  4. {% block page_content %}
  5. <div class="page-header">
  6. <h1>Not Found</h1>
  7. </div>
  8. {% endblock %}





Flask快速玩框架

标签:

原文地址:http://www.cnblogs.com/perfe/p/5647790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!