python虚拟环境

wsgi-----werkzeug  web服务器与pythonweb通信标准   werkzeug.pocoo.org
jinja2----- jinjia.pocoo.org

数据库集成、表单认证、文件上传等,需要安装扩展

涉及的python包

0 Flask ( 1.0.2 )
主页: http://flask.pocoo.org/
、原码: http ://github .com/pallets/flask
文档: http ://flask.pocoo.org/docs/
0 pip ( 10.0.1)
主页: https: //github.com/pypa/pip
文档: https: //pip. pypa.io
0 Pipenv (v2018.05.18 )
主页: https://github.com/pypa/pipenv
文档: http: //pipenv.readthedocs.io/
0 Virtualenv ( 15.1.0 )
主页: https :// github.com/pypa/virtualenv
文档: https: //virtualenv.pypa.io
0 Pipfile ( 0.0.2 )
主页: https ://github.com/pypa/pipfile
0 python-dotenv ( 0.8.2)
主页: https: //github.com/theskumar/python-dotenv
0 Watchdog ( 0.8.3 )
主页: https ://github.com/gorakhargosh/watchdog
文档: https: //pythonhosted.org/watchdog/

环境准备

远程服务器搭建py虚拟环境

pip3 install pipenv  #pipenv创建虚拟环境
pipenv --version   #查看版本

cd  flask1.0
git clone https://github.com/greyli/helloflask.git    #flask项目



#创建虚拟环境
    pipenv install  #虚拟环境一般使用virtualenv来创建,pipenv集成了virtualenv,管理依赖包和虚拟环境更方便
    #pipenv 会根据当前目录下pipfile文件中写的依赖包,创建一个文件夹,文件夹中是虚拟环境
	注意记录创建虚拟环境的目录,可以将python解释器配置到pycharm中。
	#/root/.local/share/virtualenvs/helloflask-iNS_Xsc0/bin/python3


#激活虚拟环境-显式执行
	cd 项目地址
    pipenv shell   #会自动在项目目录的.env文件中加载环境变量

#激活虚拟环境-不显式执行
    pipenv run  python hello.py  #以虚拟环境python解释器python文件。

#管理依赖
	部署到远程服务器或者分享给别人,使用pip搭配requirements.txt文件来记录依赖
	pipenv环境下,安装删除更新依赖包,pipfile以及pipfile.lock会自动更新

#查看当前环境依赖
	pipenv graph  #当前环境查看
	pip list       #查看依赖列表


#退出虚拟环境
deactivate

#删除虚拟环境
rmvirtualenv  虚拟环境名称

激活后命令行自带虚拟环境名称

安装flask

pipenv install flask     #在virtual环境中,会自动安装jinja2,werkzeug等依赖包

pycharm远程开发环境配置

在win平台使用pycharm,操作虚拟机代码+运行虚拟机代码

https://www.cnblogs.com/wenqiangit/p/9771947.html

注意flask启动参数配置,配置之后就可以以配置的参数来启动app.py,
flask run --host=0.0.0.0 								#--host=0.0.0.0监听所有网卡
flask run --host=0.0.0.0 --port=8000   	#port监听为8000
#会自动找app.py或者application.py运行

直接运行的话,python app.py。不能启动flask

内网穿透工具:ngrok.com、localtunnel.github.io/www
./ngrok http 0.0.0.0:5000     #ngrok.com;内网穿透到ngrok


下图必须写workdir:是远程程序的执行目录

测试访问:关闭虚拟机防火墙,使用虚拟机ip,在宿主机浏览器直接访问虚拟机ip+5000端口

flask

路由

from flask import Flask     #导入flask类
app = Flask(__name__)		#__name__=当前文件名,实例化一个flask的app

#简单url
@app.route('/')									#匹配路由,flask路由都是装饰器
def index():                                   #index视图函数
    return '<h1>Hello, World!</h1>'
    

#添加多个视图,都返回一个视图函数
@app.route('/hi')
@app.route('/hello')
def say_hello():
    return '<h1>Hello, Flask!</h1>'
    
#动态url
@app.route('/greet', defaults={'name': 'Programmer'})   #如果用户访问/greet,name变量使用默认值
@app.route('/greet/<name>')   					#访问/greet/foo、/greet/bar会触发
def greet(name):
    return '<h1>Hello, %s!</h1>' % name    #name变量可以被函数接收并使用

flask run----运行flask

flask run   #启动,在虚拟环境启动
pipenv  run flask run     #启动开发服务器

环境变量

#自动发现程序实例
	从当前目录中寻找app.py和wsgi.py模块,寻找app或application
	从环境变量FLASK_APP对应值寻找app或application实例
	主模块名称app.py,flask run命令会自动在其中寻找程序实例。如果主模块是其他名称,需要设置FLASK_APP。
	export FLASK_APP=hello   #如果主程序是hello,不是app,要记得改下模块

#管理环境变量
	安装python-dotenv后,使用flask run会自动从.flaskenv文件和.env文件加载环境变量

#安装python-dotenv
	pipenv install python-dotenv

注意:

.gitignore 文件使用忽略提交.env关键环境变量到仓库:	 								     https://github.com/github/gitignore/blob/master/Python.gitignore

忽略提交,pycharm生成的.idea目录
https://www.gitignore.io/api/pycharm

设置运行环境

flask支持区分开发和生产环境,开发环境具有在页面debug功能,重载功能
通过环境变量FLASK_ENV=development配置
-	调试器:查看错误代码的上下文信息
-	重载器:修改代码,立即作用到程序上,安装watchdog,效果更好

pipenv install watchdog --dev   #--dev将包申明为开发依赖,在pipfile文件中,包会添加到dev-packages
项目中使用的css、javascript,浏览器会缓存,需要crtl+f5

python交互解释器
	python shell
	flask shell    #需要进入python虚拟环境,开启虚拟环境,并在项目目录中执行,需要有.flask文件指定当前是生产还是开发


flask扩展

#注意扩展的书写格式
from flask import Flask
from flask_foo import Foo
app=Flask(__name__)
foo=Foo(app)

项目配置

# 加单个配置变量
app.config['ADMIN_NAME']='Peter'    #配置变量必须大写

# 加多个配置变量
	app.config.update(
	TESTING=True,
	SECRET_KEY='_sdjajadasda/'               
)

# 读取配置变量
value=app.config['ADMIN_NAME']

url与端点

在html、js、css中生成url
@app.route('/')
def index():
	return 'hello flask!'
url_for('index')    #返回一个url=/,生成url绝对路径需要将第二个参数改为_external=True
					#index为视图函数名称

@app.route('/hello/<name>')
def greet(name):
    return 'hello %s!' % name
url_for('say_hello',name='jack')     #生成url=/hello/jack

flask命令

flask run   #运行flask服务器
flask shell #启动shell

创建自定义命令
@app.cli.command()
def hello():
    click.echo('hello,human!')
调用:flask hello,会运行hello代码
    
@app.cli.command()
def hello('say-hello'):
    click.echo('hello,human!')
调用:flask say-hello
    
flask --help   查看帮助
flask routes   #显示所有注册路由
flask run   	#运行服务端
flask  shell    #运行shell在app上下文

模板与静态文件

template与static file目录结构
hello/
	- templates/
	- static/
	app.py

HTTP

request对象



#请求地址http://192.168.188.128:5000/hello?name=Grey;返回hello,参数名字
from flask import Flask,request
app = Flask(__name__)
@app.route('/hello')
def hello():
    name = request.args.get('name','Flask')   #使用get方法获取请求参数,参数不在不报异常,返回none
    return '<h1>hello,%s!<h1>' % name
    
    
colors = ['blue','white','red']    #('blue', 'white', 'red')
@app.route('colors/<any(%s):color>' % str(colors)[1:-1])
    
    
>>> print('colors/<any(%s):color>' % str(colors)[1:-1])
colors/<any('blue', 'white', 'red'):color>  #匹配color参数值为其中一个

posted @ 2021-02-21 09:45  zxhy哦  阅读(138)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css