Python3 Flask框架

1 篇文章 0 订阅
1 篇文章 0 订阅

                                              Flask框架

内容原创,侵权必究。学习分享请注明地址:https://blog.csdn.net/Jackie_ZHF/article/details/82592928

博主有时间会不定期更新大数据hadoop spark storm人工智能方面的博客

目录

一、What`s Flask

 2-1、安装virtualenv

 2-2、安装Flask

 3-1、第一个flask程序

 3-2、Debug模式及使用配置文件

3-3、URL传参到视图

 3-4、URL反转

 3-5、页面跳转和重定向

 4-1、模板渲染和参数

 4-2、模板中访问属性和字典

 4-3、if判断

 4-4、for循环

 4-5、过滤器

 4-6、继承和使用block

 4-7、URL连接和加载静态文件

 5-1、安装mysql数据库、PyMySQL

 5-2、使用flask+pymysql操作数据库mysql

  5-2-1、查询

  5-2-2、插入

  5-2-3、更新

  5-2-4、删除

  7-1、Session和cookie

  7-2、Flask中session工作机制

  7-3、flask操作session

八、项目实战

   8-1、proxypool


一、What`s Flask

     Flask是一个使用 Python 编写的轻量级 Web 应用框架。灵活性伸缩性很好。其WSGI工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。         

  • 安装部署

 2-1、安装virtualenv

        Flask 依赖两个外部库, Werkzeug 和 Jinja2。Werkzeug 是一个 WSGI 工具集,它是 web 应用程序和用于开发和部署的服务器之间的标准接口。Jinja2 负责渲染模板。

     因此怎样才能快速地安装这一切了?你有很多种方法去安装,但是最简单粗暴的方式就是 virtualenv。Virtualenv 能够允许多个不同版本的 Python 安装,每一个服务于各自的项目。 它实际上并没有安装独立的 Python 副本,只是提供了一种方式使得环境保持独立。

安装virtualenv 

# sudo pip install virtualenv

 

    一旦成功安装 virtualenv,运行 shell 创建自己的环境。我通常会创建一个项目文件夹,其下创建 venv 文件夹:

# mkdir myproject

# cd myproject/

# virtualenv venv

现在,只要你想要在某个项目上工作,只要激活相应的环境。在 OS X 和 Linux 下,按如下做:

# . venv/bin/activate

无论哪种方式,你现在能够使用你的 virtualenv (注意你的 shell 提示符显示的是活动的环境)

 

 

 

 

 2-2、安装Flask

    如果你想要用最新版的 Flask 干活,这里有两种方式:你可以使用 pip 拉取开发版本, 或让它操作一个 git checkout。无论哪种方式,依然推荐使用 virtualenv。

在一个新的 virtualenv 上获取一个 git checkout,在开发模式下运行:

#  git clone http://github.com/mitsuhiko/flask.git

 

 

# cd flask/

# virtualenv venv --distribute

# python setup.py develop

 

 

   Window安装步骤一致,不用加sudo。激活用:venv\scripts\activate

 

 

  • URLS和视图

 3-1、第一个flask程序

    New 一个flask项目

           

 
# 首先导入了类 Flask 。这个类的实例化将会是我们的 WSGI 应用。第一个参数是应用模块的名称

  

  from flask import Flask

  

app = Flask(__name__)

  

  # 使用装饰器 route() 路由 
#告诉 Flask 哪个 URL 才能触发我们的函数

  @app.route('/')

  def hello_world():

    return 'Hello World!'

  

  if __name__ == '__main__':

    # 本机访问

    # app.run()

    # 外部服务器访问

    app.run(host='192.168.1.24')

  

现在浏览 http://127.0.0.1:5000/192.168.1.24:5000/,你会看到你的Hello World问候。

 

 

 3-2、Debug模式及使用配置文件

  

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  from flask import Flask

  import config

app = Flask(__name__)

app.config.from_object(config)

@app.route('/')

  def hell_debug():

    a=1

    b=0

    c=a/b

    return "I am Jackie,debug test"

  if __name__ == '__main__':

    app.run()

 

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  DEBUG = True

 

 

 

 

 

 

3-3、URL传参到视图

 

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  from flask import Flask

  import config

app = Flask(__name__)

@app.route('/')

  def helle():

    return 'hello url ~'

  @app.route('/article/<id>')

  def article(id):

    return u'您请求的参数:%s' %id

  

  if __name__ == '__main__':

    app.run()

 

 

 

 

 3-4、URL反转

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

  from flask import Flask, url_for

  import config

  

app = Flask(__name__)

  

@app.route('/')

  def index():

    print (url_for('my_list'))

    # 从视图函数到URL函数转换叫反转URL

    # 在模板 和 页面重定向 时需要使用URL反转

    # 反转带参的时候要添加参数

    print (url_for('article',id='123456'))

    return 'hello ,This is URL反转 '

  @app.route('/list/')

  def my_list():

    return 'list'

  

  @app.route('/article/<id>/')

  def article(id):

    return '您请求的参数id是 %s '% id

  

  if __name__ == '__main__':

    app.run()

 

 

  

 3-5、页面跳转和重定向

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

  from flask import Flask,redirect,url_for

app = Flask(__name__)

  

@app.route('/')

  def index():

     login_url = url_for('login')

     return redirect(login_url)

    # return redirect('/login')

     return u'This is Jackie redirect'

  

  @app.route('/login')

  def login():

    return '这是登录首页'

  

  @app.route('/question/<is_login>/')

  def question(is_login):

    if is_login == '1':

        return '调查问卷页面'

    return redirect(url_for('login'))

  

  

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

 

 

 

  • JinJa2模板

 4-1、模板渲染和参数

代码包含模板访问属性和字典

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

'''

   1. 在template目录下创建HTML文件模板

    从Flask中导入render_template函数,渲染模板。

  注意:只需写模板名字,不需要填写templ这个文件夹路径

   2.如果只有一个或少数参数 直接填写参数关键字

   如果有多个参数可以将参数放在字典中  然后用‘ **字典名 ’把

   参数传递进去,模板直接填写关键字参数 方便管理和使用

   

   3.在HTML模板中要使用一个变量,语法{{ 变量名.参数}}

   4.如果要访问获取模型中的属性或字典,可以通过{{ 变量名.参数}}或如{{参数['age']}}格式

'''

  

  from flask import Flask,render_template

app = Flask(__name__)

  

@app.route('/')

  # 1

# def index():

#     return render_template('index.html')

# 2

# def index():

#     return render_template('index.html',username='jackie.Zhou')

# 3 使用字典

# def index():

#     context = {

#         'username':'Jackie.Zhou',

#         'gender':'男',

#         'age':18

#     }

#     return render_template('index.html',**context)

  def index():

    class Person(object):

        name = 'Jack.Ma'

        gender = '男'

        age =18

    p = Person()

    context = {

        'username':'Jackie.Zhou',

        'gender':'男',

        'age':18 ,

        'person':p ,

  

        # 5

        'com':{

            'jackie':'www.JJCC.com',

            'jack':'www.ali.com'

        }

    }

    return render_template('index.html',**context)

  

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

 

 

 4-2、模板中访问属性和字典

 代码包含在上面4-1中

 

 4-3、if判断

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  from flask import Flask,render_template

app = Flask(__name__)

@app.route('/<is_login>/')

  def index(is_login):

    if is_login == '1':

        user ={

            'username':'jackie' ,

            'age':18

        }

        return render_template('index02.html',user = user)

    else:

         return render_template('index02.html')

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

 4-4、for循环

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

'''

    1、字典遍历和Python中一样,可以使用items() keys()、values()、iteritems()

iterkeys()、itervalues()   

     {% for k,v in user.items()  %}

            <p>{{ k }}:{{ v }}</p>

        {% endfor %}

        

    2、列表遍历

'''

  

  from flask import Flask,render_template

  

app = Flask(__name__)

  

@app.route('/')

  def index():

    user = {

        'username': '老裴' ,

        'age': 40

    }

    # 2 列表

    webnames = ['www.baidu.com','www.ali.com']

  

    for k,v in user.items():

        print(k)

        print(v)

    return render_template('index03.html',user=user,webnames=webnames)

  

  #   3

  @app.route('/games')

  def mygame():

    heros = [

    {

        'name':'Jugg',

         'love':'80%'

    },

    {

        'name': '斯拉克',

        'love': '65%'

    },

    {

        'name': '斧王',

        'love': '70%'

    },

    {

        'name': '屠夫',

        'love': '85%'

    },

    {

        'name': '祈求者',

        'love': '35%'

    }

    ]

    return render_template('index03.html',heros = heros)

  

  

  if __name__ == '__main__':

    app.run()

 

 

 4-5、过滤器

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

'''

    过滤器可以处理变量,把原始变量经过处理后再展示,作用的对象是变量

{{ myimages | default('XXX') }}

    default过滤器:如果当前变量不存在,可以指定默认值

    length过滤器: 求列表 元组 字典 字符串的长度

'''

  from flask import Flask,render_template

  

app= Flask(__name__)

  

@app.route('/')

  def index():

    account =[

        {

            'user':'lipengpeng' ,

            'age':28

        },

        {

            'user': 'liaojin',

            'age': 18

        },

        {

            'user': 'xulaotou',

            'age': 33

        }

        ]

  

    # return render_template('index04.html',myimages ='https://avatar.csdn.net/F/F/3/1_zy_281870667.jpg')

    return render_template('index04.html',account = account)

  # https://avatar.csdn.net/9/C/8/3_ly4wu5giy.jpg

  

  

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 4-6、继承和使用block

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

'''

    1.继承 

    2.block实现:

        可以让子模板实现一些自己的需求,服模板需要提前定义

    注意:子模板放在block中(也可以定义多个block)

'''

  from flask import Flask,render_template

app = Flask(__name__)
@app.route('/')

  def index():

    return render_template('index05.html')

  # 继承 {% extends 'index05.html' %}

  @app.route('/login')

  def index02():

    return render_template('index06.html')

  

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

 4-7、URL连接和加载静态文件

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

'''

    url链接 

     使用{{ url_for('视图函数') }}

     加载静态文件 会自动在static中寻找

      使用{{ url_for('static',filename='静态文件路径') }}

'''

  from flask import Flask,render_template

app = Flask(__name__)

@app.route('/')

  def index():

    return render_template('index07.html')

  

@app.route('/login')

  def login():

    return render_template('index08.html')

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

 

   

    

  • PyMySQL
     pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。

 5-1、安装mysql数据库、PyMySQL

      * Mysql安装。 之前安装过,此处省略
     * pip install pymysql

 

 5-2、使用flask+pymysql操作数据库mysql

  5-2-1、查询

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

  import pymysql  # 导入 pymysql

  

# 打开数据库连接

  db = pymysql.connect(host="node01", user="root",

                     password="123456", db="pymysql", port=3306)

  

  # 使用cursor()方法获取操作游标

  cur = db.cursor()

  

  # 1.查询操作

# 编写sql 查询语句  user 对应我的表名

  sql = "select * from person"

  try:

    cur.execute(sql)  # 执行sql语句

  

    results = cur.fetchall()  # 获取查询的所有记录

    print("id", "name", "password")

    # 遍历结果

    for row in results:

        id = row[0]

        name = row[1]

        password = row[2]

        print(id, name, password)

  except Exception as e:

    raise e

  finally:

    db.close()  # 关闭连接

 

 

 

  5-2-2、插入

# # 2.插入操作

# db = pymysql.connect(host="localhost", user="root",

#                      password="123456", db="test", port=3307)

#

# # 使用cursor()方法获取操作游标

# cur = db.cursor()

#

# sql_insert = """insert into user(id,username,password) values(4,'liu','1234')"""

#

# try:

#     cur.execute(sql_insert)

#     # 提交

#     db.commit()

# except Exception as e:

#     # 错误回滚

#     db.rollback()

# finally:

#     db.close()

 

 

  5-2-3、更新

# # 3.更新操作

# db = pymysql.connect(host="localhost", user="root",

#                      password="123456", db="test", port=3307)

#

# # 使用cursor()方法获取操作游标

# cur = db.cursor()

#

# sql_update = "update user set username = '%s' where id = %d"

#

# try:

#     cur.execute(sql_update % ("xiongda", 3))  # 像sql语句传递参数

#     # 提交

#     db.commit()

# except Exception as e:

#     # 错误回滚

#     db.rollback()

# finally:

#     db.close()

 

 

  5-2-4、删除

# 4.删除操作

# db = pymysql.connect(host="localhost", user="root",

#                      password="123456", db="test", port=3307)

#

# # 使用cursor()方法获取操作游标

# cur = db.cursor()

#

# sql_delete = "delete from user where id = %d"

#

# try:

#     cur.execute(sql_delete % (3))  # 像sql语句传递参数

#     # 提交

#     db.commit()

# except Exception as e:

#     # 错误回滚

#     db.rollback()

# finally:

#     db.close()

 

 

 

 

 

 

  • Flask进阶:flask-scrip

      Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;

     Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;

官方文档:http://flask-script.readthedocs.io/en/latest/

安装flask-scrip:

      进入虚拟环境中,pip install flask-script进行安装

 

 

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  from flask_script import Manager

  from flaskscript import app

  # from dbmanager import DBManager

  manager = Manager(app)

@manager.command

  def runserver():

    print('我的服务器server is runing ...')

  # manager.add_command('dbs',DBManager)

  if __name__ == '__main__':

    manager.run()
 

 

 

  • Session和cookie

  7-1、Session和cookie

     在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 Session来跟踪和判断。

区别

     Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪

 

  7-2、Flask中session工作机制

 

  7-3、flask操作session

# -*- coding:utf-8 -*-

# Author:Jackie Zhou

  

  from flask import Flask,session

  import os

  

app = Flask(__name__)

  # 使用session要使用SECRET_KEY 用了做加密的。并且这个SECRET_KEY

# 如果每次服务器启动后都变化 那么之前的session就不能通过这个SECRET_KEY进行解密

  

  app.config['SECRET_KEY'] = os.urandom(24)

  

@app.route('/')

  def hello_session():

    session['username'] = 'Jack.Ma'

    return 'hello world'

  

  

  @app.route('/get/')

  def get_session():

    return session.get('username')

  

  

@app.route('/del/')

  def del_session():

    print(session.get('username'))

    print(session.pop('username'))

    return 'success'

  

  @app.route('/clear/')

  def clearsession():

    print(session.get('username'))

    session.clear()

    print(session.get('username'))

    return 'clear success'

  

  

  if __name__ == '__main__':

    app.run(debug=True)

 

 

 

八、项目实战

   8-1、proxypool

 

   8-2、cookiepool

 

https://github.com//germey/proxypool

 

     

 

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值