1.flask和django的区别?

flask,是一个轻量级的框架,内置了:路由/视图/模板(jinja2)/cookie/session/中间件.  可扩展强,第三方组件非常多,例如:wtforms/flask-session/flask-sqlalchemy.

django,是一个重武器,django内置了很多功能方便我们使用,例如:admin/orm/模板/form/modelform/session/cookie/中间件/路由/缓存/信号/数据库的读写分离/分页...
flask,短小精悍可扩展强.
django,大而全重武器.

django好还是flask好?

小程序,flask比较好.
中大型,django比较好.

2.快速入门

pip3 install flask

2.1 werkzurg

werkzurg是一个wsgi,本质上提供了socket服务端,用于接收用户请求.

django和flask一样,它们内部都没有实现socket服务端,需要依赖wsgi.

  • django, wsgiref
  • flask, werkzurg

2.1.1 wsgiref实现一个网站

from wsgiref.simple_server import make_server

class WSGIHandler(object):

    def __call__(self,environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] if __name__ == '__main__':
obj = WSGIHandler()
httpd = make_server('127.0.0.1', 8000, obj)
httpd.serve_forever()

2.1.2 werkzeug实现一个网站

from werkzeug.wrappers import Response
from werkzeug.serving import run_simple class Flask(object):
def __call__(self,environ, start_response):
return Response('Hello World!')(environ, start_response) if __name__ == '__main__':
app = Flask()
run_simple('127.0.0.1', 5000, app)

2.2flask程序

from flask import Flask

# 实例化了一个Flask对象
app = Flask(__name__) # 添加路由关系
@app.route('/index')
def index():
return '你好' if __name__ == '__main__':
# 启动服务端
app.run()

3.flask用户登录实例

  • 关于返回值

    from flask import Flask,render_template,request,redirect
    
    app = Flask(__name__)
    
    @app.route('/login',methods=['GET','POST'])
    def login():
    return "xxx"
    return render_template('模板文件',参数)
    return redirect(...)
    return jsonify({"k1":123})
    if __name__ == '__main__':
    app.run()
  • 关于模板

    默认放在根目录的tempaltes
  • 关于用户请求

    request.method
    request.form # POST
    request.args # GET
  • session

    加密的形式放在用户浏览器的cookie中.
    from flask import Flask,render_template,request,redirect,jsonify,url_for,session app.secret_key = "29ualknd872iuknsdgf"
    def auth(func):
    @functools.wraps(func)
    def inner(*args,**kwargs):
    user = session.get('user_info')
    if not user:
    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 == 'alex' and pwd == 'dsb':
    # 在session中存储一个值
    session['user_info'] = user return redirect(url_for('index'))
    return render_template('login.html',error="用户名或密码错误")
  • 在flask视图中添加装饰器

    • 位置route的下面

    • 记得加functools.wraps(...) , 保留函数的元信息.

      from flask import Flask,render_template,request,redirect,jsonify,url_for,session
      
      app.secret_key = "29ualknd872iuknsdgf"
      def auth(func):
      @functools.wraps(func)
      def inner(*args,**kwargs):
      user = session.get('user_info')
      if not user:
      return redirect(url_for('login'))
      return func(*args,**kwargs)
      return inner
      @app.route('/index')
      @auth
      def index():
      user_list = ["庄伯","亮哥",'实验']
      user_info_list = [
      {"name":'庄伯','age':18},
      {"name":'亮哥','age':15},
      {"name":'实验','age':18},
      ]
      return render_template('index.html',user_list=user_list,user_info_list=user_info_list)
  • 特殊装饰器:before和after request装饰器

    from flask import Flask,render_template,request,redirect,jsonify,url_for,session
    import functools
    app = Flask(__name__) app.secret_key = "29ualknd872iuknsdgf" @app.before_request
    def f1():
    print('f1') @app.before_request
    def f11():
    print('f11') @app.after_request
    def f2(response):
    print('f2')
    return response @app.after_request
    def f22(response):
    print('f22')
    return response @app.route('/login')
    def login():
    print('login')
    return 'Login' @app.route('/index')
    def index():
    print('index')
    return 'index' if __name__ == '__main__':
    app.run() '''
    f1
    f11
    login
    f22
    f2
    '''

1.flask基础的更多相关文章

  1. flask基础之AppContext应用上下文和RequestContext请求上下文(六)

    前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...

  2. flask基础之请求处理核心机制(五)

    前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask ...

  3. flask基础之app初始化(四)

    前言 flask的核心对象是Flask,它定义了flask框架对于http请求的整个处理逻辑.随着服务器被启动,app被创建并初始化,那么具体的过程是这样的呢? 系列文章 flask基础之安装和使用入 ...

  4. flask基础之jijia2模板语言进阶(三)

    前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...

  5. flask基础之jijia2模板使用基础(二)

    前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...

  6. 笔记-flask基础操作

    笔记-flask基础操作 1.      前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2.      开发环境配置 2.1.    编译环境准备 安装相关Lib ...

  7. Flask基础(16)-->WTForms表单创建和简单验证

    Flask基础(16)-->WTForms表单创建和简单验证 前言:使用Flask_WTF需要配置参数SECRET_KEYCSRF_ENABLED是为了CSRF(跨站请求伪造)保护.SECRET ...

  8. Flask基础(14)-->自定义过滤器

    Flask基础(13)-->自定义过滤器 什么是过滤器? 过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 P ...

  9. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...

  10. Flask基础(06)-->视图常用逻辑

    Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...

随机推荐

  1. jq实现监听滚动条导致导航栏变色

    1效果图 2 html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  2. 雷神领域(并查集真是个好东西)并查集+流氓dp

    考场上,整整看了半个小时以上的题目!!! 化简题意: 给定一个全0矩阵,一些坐标点(x,y)为1,当三个点可以构成一个直角三角形时(直角边长为整数)拓展为一个矩形,之后从(0,0)出发,求最多的占用行 ...

  3. jmeter-利用While Controller控制器实现接口报错时的重试机制

    预期功能:在jmter脚本报错的时候重试,最多重试5次 1.添加While Controller 2.添加请求 3.添加断言,在断言不符合预期的时候加上代码:vars.put("status ...

  4. 演示vsftpd服务匿名访问模式、本地用户模式的配置

    文件传输协议(FTP,File Transfer Protocol) 即能够让用户在互联网中上传.下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和F ...

  5. 可保图片不变形的object-fit

    Object-fit 我们有时候浏览一些网站的时候,偶尔会遇到这种情况:  明显它喵的形变了,尤其是这种这么业余的失误,还是出现在一个专门做图片的网站上. 产生这种现象的原因是:图片写了固定的宽高,这 ...

  6. MySQL-配置环境变量及修改密码(附-mysql安装教程)

    MySQL-配置环境变量和修改密码 mysql的安装教程:链接:https://pan.baidu.com/s/1rrPT2X0yRF58kN8jZZx-Mg 密码:55dh 一. 闪退问题 1.1. ...

  7. 【Swift】UNNotificationServiceExtension

    一.简介 An object that modifies the content of a remote notification before it's delivered to the user. ...

  8. variable precision SWAR算法

    计算二进制形式中1的数量这种问题,在各种刷题网站上比较常见,以往都是选择最笨的遍历方法“蒙混”过关.在了解Redis的过程中接触到了variable precision SWAR算法(以下简称VP-S ...

  9. hdu 2063 过山车 (二分图,最大匹配)

    过山车Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  10. nyoj 101-两点距离 (数学)

    101-两点距离 内存限制:64MB 时间限制:3000ms 特判: No 通过数:27 提交数:74 难度:1 题目描述: 输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1, ...