zoukankan      html  css  js  c++  java
  • 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参数值为其中一个
    

    微信:jinmuqq222
  • 相关阅读:
    Pandas学习笔记,如何从DataFrame里选择一个Series
    数据结构_郝斌_数组
    数据结构_郝斌_预备知识2
    数据结构_郝斌_预备知识1
    数据结构_郝斌_目录
    数据结构_郝斌_链表
    Vocabulary Recitation 2020/04/08
    5月11号
    5月10号
    5月9号
  • 原文地址:https://www.cnblogs.com/jinmuqq222/p/14424235.html
Copyright © 2011-2022 走看看