Flask快速玩框架

最近比较忙

快速玩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 %}

来自为知笔记(Wiz)

时间: 2024-10-26 14:37:04

Flask快速玩框架的相关文章

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

框架特点: 1. 非常小, 小到可称为微型框架 2. 可扩展, 设计初衷就是不会替开发者做太多决策,支持随时更换或动手实现扩展模块 3. 三依赖, 路由/调试/WSGI(由WERKZEUG提供的WEB服务器网关接口实现),模版系统(由JINJA2实现),签名(由ITSDANGEROUS实现) 快速安装: pip install flask 快速入门: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: 

快速玩转Apple Pay开发

快速玩转Apple Pay开发 更新时间:2016年02月20日09时25分 来源:传智播客 Apple Pay 2016年2月18日上午,苹果公司宣布,与中国银联达成合作,正式在中国大陆上线Apple Pay服务. Apple Pay是一个基于NFC的支付系统,几乎所有的银行都支持.不知道大家还有没有印象,当初支付宝和位置的支付刚出来的时候,银行都恨不得想把他俩弄死.为啥Apple Pay一出来各大银行都支持.因为它和支付宝支付.微信支付是完全不同的概念.Apple Pay根本不是一个第三方支

Python Flask 快速构建高性能大型web网站项目实战

Python Flask 快速构建高性能大型web网站项目实战视频[下载地址:https://pan.baidu.com/s/1cUggNbUvptYz5vvwBhsdrg ] 作为最最流行的Python Web开发的微框架,Flask独树一帜.它不会强迫开发者遵循预置的开发规范,为开发者提供了自由度和创意空间.突然发现这个对自动化运维开发非常有用,发上来,给大家! Python Flask 快速构建高性能大型web网站项目实战视频 project.zip 第1章 课程介绍1.1-1.2课程导学

Flask快速入门(18) — 信号

Flask快速入门(18) - 信号 作用:Flask框架中的信号基于blinker,其主要就是让开发者可以在flask请求过程中定制一些用户行为 安装:pip install blinker 内置信号: request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _signals.signal('request-finished') # 请求结束后执行 before_render_templ

快速构建框架(S2SH)

搭建项目:1.创建web项目2.引入类库    [struts2]        asm-3.3.jar        asm-commons-3.3.jar        asm-tree-3.3.jar        commons-fileupload-1.3.1.jar        commons-io-2.2.jar        commons-lang3-3.1.jar        freemarker-2.3.19.jar        ognl-3.0.6.jar    

GoogleIO 2013 Android快速联网框架Volley介绍

最近调研Android开发框架,看了xutils,KjFramework等框架的HTTP模块,觉得都太简单了,只是简单封装了HttpUrlConnenction和Handler,加了个回调函数,感觉就是比自己写一个好一点点.后面发现了Volley这个比较靠谱的Android网络请求框架,就用它了. Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. 这是Volley名称的由来: a burst or emission of many things or a lar

Flask快速入门(17) — flask_session

Flask快速入门(17) - flask_session 作用:将默认保存的签名cookie中的值,保存到 redis/memcached/file/Mongodb/SQLAlchemy 安装:pip install flask-session 使用1: from flask import Flask,session from flask_session import RedisSessionInterface import redis app = Flask(__name__) conn=r

Flask快速入门(20) — 多app应用

Flask快速入门(20) - 多app应用 之前一直是一个app,如果有多个app该怎么进行分发呢? from werkzeug.wsgi import DispatcherMiddleware from werkzeug.serving import run_simple from flask import Flask,current_app # 注册两个app app1 = Flask('app01') app2 = Flask('app02') @app1.route('/index')

Flask快速入门,知识整理

一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器. “微”