django是个大而全的框架,flask是一个轻量级的框架。

django内部为我们提供了非常多的组件:orm / session / cookie / admin / form / modelform / 路由 / 视图 / 模板 / 中间件 / 分页 / auth / contenttype / 缓存 / 信号 / 多数据库连接

flask框架本身没有太多的功能:路由/视图/模板(jinja2)/session/中间件 ,第三方组件非常齐全。

注意:django的请求处理是逐一封装和传递; flask的请求是利用上下文管理来实现的。

安装

pip3 install flask #会自动安装依赖

1. 依赖wsgi Werkzeug

from werkzeug.serving import run_simple

def func(environ, start_response):
print('请求来了')
pass if __name__ == '__main__':
run_simple('127.0.0.1', 5000, func)
from werkzeug.serving import run_simple

class Flask(object):

    def __call__(self,environ, start_response):
return "xx"
app = Flask() if __name__ == '__main__':
run_simple('127.0.0.1', 5000, app)
from werkzeug.serving import run_simple

class Flask(object):

    def __call__(self,environ, start_response):
return "xx" def run(self):
run_simple('127.0.0.1', 5000, self) app = Flask() if __name__ == '__main__':
app.run()

2. 快速使用flask

from flask import Flask

# 创建flask对象
app = Flask(__name__) @app.route('/index')
def index():
return 'hello world' @app.route('/login')
def login():
return 'login' if __name__ == '__main__':
app.run()

总结:

  • flask框架是基于werkzeug的wsgi实现,flask自己没有wsgi。
  • 用户请求一旦到来,就会之 app.__call__ 方法 。
  • 写flaks标准流程

3.用户登录&用户管理

from flask import Flask,render_template,jsonify,request,redirect,url_for,session
import functools app = Flask(__name__) app.secret_key = 'zbbzxy521521!' DATA_DICT = {
1:{'name':'zbb','age':24},
2:{'name':'zxy','age':18}
}
def auth(func):
@functools.wraps(func)
def inner(*args,**kwargs):
username = session.get('xxx')
if not username:
return redirect(url_for('login'))
return func(*args,**kwargs)
return inner @app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'zbb' and pwd == 'zxy':
session['xxx'] = 'zbb'
return redirect('/index') error = "输入哟有误"
return render_template('login.html',error=error) @app.route('/index',endpoint='idx')
@auth
def index():
data_dict = DATA_DICT
return render_template('index.html',data_dict=data_dict) @app.route('/edit',methods=['GET','POST'])
@auth
def edit():
nid = request.args.get('nid')
nid = int(nid)
info = DATA_DICT[nid]
if request.method == "GET":
return render_template('edit.html',info=info) user = request.form.get('name')
pwd = request.form.get('age')
DATA_DICT[nid]['name']=user
DATA_DICT[nid]['age']=pwd
return redirect(url_for('idx'))
@app.route('/del/<int:nid>')
@auth
def delete(nid):
del DATA_DICT[nid]
return redirect(url_for('idx')) if __name__ == '__main__':
app.run()

edit.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
<input type="text" name = 'name' value="{{ info.name }}">
<input type="text" name = age value="{{ info.age }}">
<input type="submit" name = '提交'>>
</form> </body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>用户名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for key,value in data_dict.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value.name }}</td>
<td>{{ value.age }}</td>
<td>
<a href="/edit?nid={{key}}">编辑</a>
<a href="/del/{{key}}">删除</a>
</td>
</tr> {% endfor %} </tbody>
</table>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name = 'user'>
<input type="text" name = pwd>
<input type="submit" name = '提交'><span style="color: red;">{{ error }}</span>
</form> </body>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </html>

4.总结

1.flask路由

@app.route('/login',methods=['GET','POST'])
def login():
pass

2.路由的参数

@app.route('/login',methods=['GET','POST'],endpoint="login")
def login():
pass # 注意:endpoint不能重名

3.动态路由

@app.route('/index')
def login():
pass @app.route('/index/<name>')
def login(name):
pass @app.route('/index/<int:nid>')
def login(nid):
pass

4.获取提交的数据

from flask import request

@app.route('/index')
def login():
request.args # GET形式传递的参数
request.form # POST形式提交的参数

5.返回数据

@app.route('/index')
def login():
return render_template('模板文件')
return jsonify()
reutrn redirect('/index/') # reutrn redirect(url_for('idx'))
return "...."

6.模板处理

{{ x }}
{% for item in list %}
{{item}}
{% endfor %}

7.session处理

app.secret_key = 'zbbzxy521521!' #设置key
session['xxx'] = 'zbb'  #登录功之后添加session

Flask_入门的更多相关文章

  1. flask_入门教程之一

    一.教程涉及开发语言.脚本.框架.数据库等内容 Python + Flask + requests 通过命令安装:pip install flask 二.创建第一个flask脚本 一个最小的 Flas ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  5. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  6. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  7. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  8. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  9. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

随机推荐

  1. Teamviewer14重置试用期版

    网上的破解版基本上全部被封禁了,只能通过修改ID来无限试用这个方法了 有些个人使用频繁的用户,经常提示商业环境 此teamviewer14重置试用期,可以一直使用 有条件的还是建议购买付费版. 到期点 ...

  2. 带有时间间隔的dp

    Uberwatch 题意:一个人打一群敌人,每间隔时间m能释放一次大招,消灭这个时刻上的所有敌人,起始时刻开始计算冷却时间 solution: dp[i]=max(dp[i],dp[i-m]); /* ...

  3. python获得坐标系信息

    # -*- coding: cp936 -*- ############################################################# import arcpy i ...

  4. Golang语言快速上手到综合实战高并发聊天室

    需要的联系我:QQ:1844912514 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言.2015,Go迎来了全迸发的一年.时隔一年,回头再看,Go已跻身主流编程语言行列. ...

  5. .net reflector

    https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download https://github.com/s ...

  6. 数据结构之栈(stack)

    1,栈的定义 栈:先进后出的数据结构,如下图所示,先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出. 栈常用操作: s=Stack() 创建栈 s.push(item) 将数据item放在 ...

  7. 优化webpack打包速度方案

    基本原理要么不进行打包:要么缓存文件,不进行打包:要么加快打包速度. 不进行打包方案: 1,能够用CDN处理的用CDN处理,比如项目引入的第三方依赖jquery.js,百度编辑器 先进行打包或者缓存然 ...

  8. 发布机制-灰度发布-例子:Gmail Labs

    ylbtech-发布机制-灰度发布-例子:Gmail Labs Gmail Labs是一个新特性橱窗,用户可以自己选择一些未正式发布的新特性进行体验,不喜欢可以关闭,在这个过程中,吃了螃蟹,也当了Go ...

  9. Python-sympy科学计算与数据处理(方程,微分,微分方程,积分)

    方程 a,b,c,x = symbols("a b c x") my_eq = Eq(a*x**2+b*x+c,0) solve(my_eq,x) Out[12]: [(-b + ...

  10. php7与其他版本共存

    转自: https://zhangge.net/5088.html php7编译安装 https://zhangge.net/5075.html