安装 pyenv
1: sudo apt-get install curl git
2: sudo curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
3: 将提示的三行代码复制 # 会出现提示的三行代码,格式如下
eg:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
4: sudo vim ~/.bashrc
5: 追加刚才复制的三行代码至最后
eg:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
6: sudo source ~/.bashrc
7: sudo echo $PATH # 如果出现 .pyenv/shims 说明成功
8: pyenv update # 更新
卸载 pyenv
1: sudo rm -fr ~/.pyenv
2: 同时删除 .bashrc 下面这些内容
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
安装 python
1: 安装依赖
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
sudo apt-get install libc6-dev gcc-5
2:cd ~/.pyenv
3: mkdir -p cache
4: 将下载的 python 包 放到 cache 下
5: pyenv install 3.6.4 -v
6: pyenv rehash # 更新 pyenv 库
Python 管理
1:列出 pyenv 已经安装的 python 版本
pyenv versions
2: python 版本切换
pyenv global 3.6.4
3:卸载 python
pyenv uninstall 3.6.4
第一种
1:Python 自带环境创建
# 创建环境
python -m venv <envname>
# 激活环境
source ....pathon<envname>/bin/activate # 环境的路径
# 退出环境
deactivate
第二种
1: pip install virtualenvwrapper
2: sudovim ~/.bashrc
3: 最后一行加入 # 注意修改主机名,和 python 版本
if [-f /home/dq/.pyenv/versions/3.6.4/bin/virtualenvwrapper.sh]; then
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/home/dq/.pyenv/versions/3.6.4/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=/home/dq/.pyenv/versions/3.6.4/bin/virtualenv
source /home/dq/.pyenv/versions/3.6.4/bin/virtualenvwrapper.sh
fi
4:source ~/.bashrc # 配置文件生效
5:基本使用:# 创建环境
mkvirtualenv <envname>
# 激活环境
workon <envname>
# 退出环境
deactivate
# 列出所有的虚拟环境
lsvirtualenv
# 删除虚拟环境
rmvirtualenv <envname>
# 虚拟环境存放位置
~/.virtualenvs/
第三种
1: pip install virtualenv
2: mkdir -p /data/blog
3: cd /data/blog/
4: 基本使用
# 创建环境
pyenv virtualenv <envname>
# 激活环境
pyenv activate <envname>
# 退出环境
pyenv deactivate <envname>
# 虚拟存放位置 ~/.pyenv/versions/
第四种
1:pycharm 编辑器自带创建虚拟环境功能
安装 flask
pip install flask
包名 |
作用 |
Werkzeug |
用于实现 WSGI,应用和服务之间的标准 Python 接口 |
Jinja |
用于渲染页面的模板语言 |
MarkupSafe |
与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击 |
ItsDangerous |
保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie |
Click |
是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令 |
文件内容
from flask import Flask
# 导入 Flask 类
app = Flask(__name__)
# 创建 Flask 类的实例
@app.route('/')
# 使用 route() 装饰器来告诉 Flask 触发函数的 URL
def hello_world():
# 函数名称被用于生成相关联的 URL。函数最后返回需要在用户浏览器中显示的信息
return 'Hello, World!'
项目启动
1:手动启动:1: 终端里导出 FLASK_APP 环境变量:
export FLASK_APP=app.py
2: 启动项目:flask run
3: 浏览器访问
127.0.0.0:5000
2:pycharm 中启动:python app.py runserver
# 文件内容中要有以下代码:if __name__ == '__main__':
app.run()
-p # 端口号
-h # 主机名
-r # 修改代码重载
-d # 调试模式
路由
1:变量规则:# 关键字参数
@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % username
127.0.0.1:5000/user/cross
# 关键字加限定类型
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id
2: 参数类型:1:string # 接受任何不包含斜杠的文本
2: int # 接受正整数
3: float # 接受正浮点数
4: path # 类似 string,但可以包含斜杠
5: uuid # 接受 UUID 字符串
3:唯一 url 和重定向行为:1:@app.route('/projects/')
2:@app.route('/about')
# 如果浏览器访问资源路径后面一个斜杠不加的话,1 路由请求不会报错,flask 会自动重定向帮你加上斜杠,2:路由也不会报错
# 如果浏览器访问资源路径后面添加上一个斜杠的话 2 路由会报 404 错误
HTTP 方法
1:route 装饰器中如果不声明请求方法默认是 GET 方法
# 如果想要使用 post 方法,需要声明 methods=['POST']
2:eg:
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
项目结构
├── App # 项目应用
│ ├── __init__.py # 初始化文件
│ ├── models.py # 模型 创建数据库模型 orm 对象关系映射
│ ├── static # 静态资源 css js img 等等
│ ├── templates # 模板,动态资源,html
│ └── views.py # 路由 试图函数
├── app.py # 整个项目文件,项目入口
命令行管理项目 (manager.py)
1:pip install flask-script
2: 基本使用
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app=app)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
manager.run()
3:修改项目入口文件为 manager.py
4: 测试:python manager.py runserver
初始化 Flask 类(__init__.py)
1:init 文件封装函数实例化 Flask 类
from flask import Flask
def create_app():
app = Flask(__name__)
return app
2:manager.py 导入函数实例化类
from flask_script import Manager
from App import create_app
app = create_app()
..................
蓝图管理路由(views.py)
1: 蓝图(blutprint):1: 好处:Flask 蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂,项目模块化,方便管理
2:安装:pip install flask-blueprint
3: 蓝图使用
1: 实例化蓝图
from flask import Blueprint
blue = Blueprint('first', __name__) # first 为蓝图名字,多为反向解析时使用
2:装饰函数
@blue.route('/')
def hello_world():
return 'Hello World!'
3:注册蓝图(manager.py)from App.views import blue
app.register_blueprint(blue) 或者 app.register_blueprint(blueprint=blue)
request
方法 |
返回值 |
eg: |
request.method |
返回请求方法 |
GET/POST |
request.base_url |
去掉 get 参数的 url |
http://127.0.0.1:5000/testrequest/ |
request.host_url |
只有主机和端口号的 url |
http://127.0.0.1:5000/ |
request.url |
完整的请求地址 |
http://127.0.0.1:5000/testrequest/ |
request.mote_addr |
请求的客服端地址 |
127.0.0.1 |
request.args.get(’ 参数 ’) |
GET 请求获取参数 |
cross |
request.form.get(‘ 参数 ’) |
POST 请求获取参数 |
cross |
request.files |
文件上传 |
。。。。 |
request.headers |
请求头 |
。。。。 |
request.path |
路由中的路径 |
。。。。 |
request.cookies |
请求中的 cookie |
。。。。 |
session |
与 request 类似 也是一个内置对象 可以直接打印 print(session) |
。。。。 |
request.form[‘ 参数 ’] |
POST 请求获取参数 |
cross |
request.args[‘ 参数 ’] |
GET 请求获取参数 |
cross |
response
返回类型
1:string # 字符串
@blue.route('/testresponse/')
def testresponse():
return '过去从未消亡,它甚至从未过去'
2:reder_template # 模板渲染
@blue.route('/testresponse1/')
def testresponse1():
return render_template('/index.html/')
3:make_response
@blue.route('/testresponse2/')
def testresponse2():
res = make_response('<h3> 过去从未消亡,它甚至从未过去 </h3>')
print(type(res))
return res
4:redirect # 重定向
@blue.route('/testresponse3/')
def testresponse3():
res = redirect(url_for('first.testresponse1'))
print(type(res))
return res
5:Response
@blue.route('/testresponse4/')
def testresponse4():
name = request.args.get('name')
res = Response('你真的认识我吗?%s' % name)
return res
会话技术