最近比较忙

快速玩Flask框架,为微博做些准备

part 1 python程序
  1. from flask importFlask, render_template, session, redirect, url_for, flash
  2. from flask_bootstrap importBootstrap
  3. from flask_moment importMoment
  4. from datetime import datetime
  5. from flask_wtf importForm
  6. from wtforms importStringField,SubmitField
  7. from wtforms.validators importRequired
  8. from flask_sqlalchemy importSQLAlchemy
  9. from flask_script importManager
  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. classNameForm(Form):
  26. name =StringField('What is your name?', validators=[Required()])
  27. submit =SubmitField('Submit')
  28. #数据库中的table类
  29. classRole(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. classUser(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 isNone:
  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. <linkrel="shortcut icon"href="{{ url_for('static', filename = 'favicon.ico') }}"
  12. type="image/x-icon">
  13. <linkrel="icon"href="{{ url_for('static', filename = 'favicon.ico') }}"
  14. type="image/x-icon">
  15. {% endblock %}
  16. {% block navbar %}
  17. <divclass="navbar navbar-inverse"role="navigation">
  18. <divclass="container">
  19. <divclass="navbar-header">
  20. <buttontype="button"class="navbar-toggle"
  21. data-toggle="collapse"data-target=".navbar-collapse">
  22. <spanclass="sr-only">Toggle navigation</span>
  23. <spanclass="icon-bar"></span>
  24. <spanclass="icon-bar"></span>
  25. <spanclass="icon-bar"></span>
  26. </button>
  27. <aclass="navbar-brand"href="/">Flasky</a>
  28. </div>
  29. <divclass="navbar-collapse collapse">
  30. <ulclass="nav navbar-nav">
  31. <li><ahref="/">Home</a></li>
  32. </ul>
  33. </div>
  34. </div>
  35. </div>
  36. {% endblock %}
  37. {% block content %}
  38. <!-- 弹出警告信息-->
  39. <divclass="container">
  40. {% for message in get_flashed_messages() %}
  41. <divclass="alert alert-warning">
  42. <buttontype="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. <divclass="page-header">
  6. <h1>Not Found</h1>
  7. </div>
  8. {% endblock %}
 

【Flask】Flask快速玩框架的更多相关文章

  1. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  2. 初识Flask、快速启动

    目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 一.初识Flask 1.1 什么是flask? Flask 本是作者 Armin Rona ...

  3. python操作三大主流数据库(4)python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示

    python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示 参考文档http://flask.pocoo.org/docs/0.11/http://flask ...

  4. 仿flask写的web框架

    某大佬仿flask写的web框架 web_frame.py from werkzeug.local import LocalStack, LocalProxy def get_request_cont ...

  5. Flask 安装 快速入门

    $ pip install flask Flask自带的Server在端口5000上监听: ython app.py flask通过request.form['name']来获取表单的内容. 外部可见 ...

  6. Inside Flask - Flask 简介

    Inside Flask - Flask 简介 前言 Flask 的设计目标是实现一个 wsgi 的微框架,其核心代码保持简单和可扩展性,很容易学习.对于有一定经验初学者而言,跟着例子和一些书的代码来 ...

  7. Inside Flask - flask.__init__.py 和核心组件

    Inside Flask - flask.__init__.py 和核心组件 简单的示例 首先看看一个简单的示例.使用 Flask ,通常是从 flask 模块导入 Flask . request 等 ...

  8. 快速玩转Apple Pay开发

    快速玩转Apple Pay开发 更新时间:2016年02月20日09时25分 来源:传智播客 Apple Pay 2016年2月18日上午,苹果公司宣布,与中国银联达成合作,正式在中国大陆上线Appl ...

  9. day92:flask:flask简介&基本运行&路由&HTTP请求和响应

    目录 1.Flask简介 2.关于使用flask之前的准备 3.flask的基本运行 4.flask加载配置 5.传递路由参数(没有限定类型) 6.传递路由参数(通过路由转换器限定路由参数的类型) 7 ...

随机推荐

  1. 响应式设计,bootstrap框架的IE兼容问题

    学习bootstrap框架,主要是为了集成好的响应式框架,及其兼容性. 但是按bootstrap中文站的说明文档 制作了一个栅格布局的test.html后,怎么测试都不成功,在ie8下一直看不到媒体查 ...

  2. linux SVNUP显示无法连接主机

    今天开发环境中突然无法连接主机了,我就想到 1.更改svn 链接地址,发现不可取,工程中的每个目录下面都有个.svn文件,修改起来麻烦: 2.建立新文件夹,重新checkout,发现还是无法链接 最后 ...

  3. Shell 语法之函数

    函数是被赋予名称的脚本代码块,可以在代码的任意位置重用.每当需要在脚本中使用这样的代码块时,只需引用该代码块被赋予的函数名称. 创建函数 格式 function name { commands } n ...

  4. hdu 5542 The Battle of Chibi(2015CCPC - C题)

    题目链接:hdu 5542 首届CCPC的C题,比赛时一起搞了好久,最后是队友A出的,当时有试过用树状数组来优化 dp,然后今天下午也用树状数组搞了一下午,结果还是踩了和当时一样的坑:我总是把用来记录 ...

  5. QQ授权登录

    这两天在做网站第三方登录,总结一下QQ登录吧,支付宝就不用了(下载dome把ID什么的换一换就基本可以了.),本文主要说的是代码的实现方式,逻辑部分主要还是根据帮助文档来的.不懂的同学可以先看看文档. ...

  6. flash的动态加载技术

    这里所说的动态加载技术, 主要是指代码模块(可以是swc也可以是swf)的动态加载.即主swf在运行的时候, 可以根据需要动态加载所需的代码模块. 为了讨论方便, 下面所说的代码模块都用swc表示,用 ...

  7. python3 字典相关函数

    python版本3.5 #Author by Liguangbo#_*_ coding:utf-8 _*_'''info={'No.1':'ligb','No.2':'donglx','No.3':' ...

  8. 0030 Linux 网络操作命令

    1. 主机是否可达 ping IP 2. 服务是否在运行 telnet IP port 3. 网络配置 ifconfig ip route arp 4. 网络访问 curl wget 5. 网络追踪 ...

  9. Spring事务管理者与Spring事务注解--声明式事务

    1.在Spring的applicationContext.xml中配置事务管理者 PS:具体的说明请看代码中的注释 Xml代码: <!-- 声明式事务管理的配置 --> <!-- 添 ...

  10. Alpha 和Beta 测试

    在正式发布产品之前往往要先发布一些测试版,让用户能够反馈出相关信息,或者找到存在的Bug,以便在正式版中得到解决. 特别是在有客户参加的情况下,对系统进行测试可能会出现一些我们没有考虑的情况,还可以解 ...