博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python Flask
阅读量:4840 次
发布时间:2019-06-11

本文共 7447 字,大约阅读时间需要 24 分钟。

本章内容:

 

 

 Flask 基本应用

 

from flask import Flask,render_template,request,redirect,session import time import subprocess app = Flask(__name__) app.secret_key='abcdefghigklmnopgistuvwxyz' #直接用render_template来渲染html,可以传递一下变量到html文件中 @app.route('/') def index():     return render_template('index.html') #如果是打开login目录,第一次是get,那就返回login.html #如果已经打开了,输入信息登录,那就是post,会针对用户名和密码来判断 @app.route('/login',methods=['GET','POST']) def login():     if request.method == 'GET':         return render_template('login.html')     elif request.method == 'POST':         user = request.form.get('username')         pwd = request.form.get('pwd')         if user and pwd:             if user == 'admin' and pwd == 'admin':                 #用seesion来记录是那个用户登录的,                 session['user'] = 'admin'                 #302重定向                 return redirect('/userlist')             else:                 #用来判断用户名和密码是否正确                 with open('a.txt','r') as foo:                     for line in foo.readlines():                         #这里有个strip,测试中有个这个问题,pwd匹配不上                         if user == line.split(':')[0] and pwd == line.split(':')[1].strip():                             session['user'] = user                             return redirect('/nomaluserlist')                     return '----------------------- not correct!!!'                                    else:             return 'you need input your username or passwd!!!!!!!!!!!!!!' @app.route('/logout') def logout():     #删除session     del session['user']     return redirect('/login') @app.route('/userlist') def userlist():     #产看登录的用户session     print session.get('user')     if session.get('user') == None:         return 'please login first!!'          userlist = []     with open('a.txt') as f:         for line in f:             userlist.append(line.split(':'))         #告知html端session的信息         return render_template('userlist.html',userxxx=userlist,user=session.get('user')) @app.route('/nomaluserlist') def nomaluserlist():     print session.get('user')     if session.get('user') == None:         return 'please login first!!'     else:         userlist = []         with open('a.txt') as f:             for line in f:                 userlist.append(line.split(':'))             return render_template('nomaluserlist.html',userxxx=userlist,user=session.get('user')) @app.route('/adduser',methods = ['GET','POST']) def adduser():     print session.get('user')     print '*'*50     #if session.get('user') != 'admin':     #    return 'you need login or not allowed this user'     if request.method == 'GET':         return render_template('adduser.html')     elif request.method =='POST':         user = request.form.get('user')         pwd = request.form.get('pwd')         with open('a.txt','a') as f:             f.write(user+':'+pwd+'\n')     return redirect('/userlist') @app.route('/deleteuser/',methods=['GET','POST']) def deleteuser():   #删除用户     user = request.args.get('user', '')     print user     print '*'*50     with open("a.txt","r") as f:         lines = f.readlines()         #print(lines)     with open("a.txt","w") as f_w:         for line in lines:             if user in line:                 continue             f_w.write(line)     return redirect('/userlist') if __name__ == '__main__':     app.run(host='0.0.0.0',port=7799,debug=True)

 

链接mysql

连接数据库的5个步骤

    conn = MySQLdb.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, passwd=DB_PASSWD, db=DB_DBNAME, charset=DB_CHARSET)     cur = conn.cursor()     cur.execute(SQL_USER_UPDATE, (clazz, tel, addr, age, uid))     conn.commit()     cur.close()     conn.close()    con.autocommit(True) #可以添加这一行,自动提交修改的内容到数据库

 

pip 配置

  使用豆瓣的源

vim /etc/pip.conf [global]                                                                                                                                                     trusted-host = pypi.douban.com index-url = http://pypi.douban.com/simple [list]format=columns

  pip 批量安装包

  把报的名字写入一个py的文件中(requirement.py)

  pip install -r requirement.py

 

Flast的多进程启动

  

  

  gunicorn w4 -b 0.0.0.0:33333 flask_web:app

现在我们使用 flask 自带的服务器,完成了 web 服务的启动。生产环境下,flask 自带的 服务器,无法满足性能要求。我们这里采用 gunicorn 做 wsgi容器,用来部署 python。1:安装 gunicorn pip install gunicorn2:单py文件的启动方式当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的__name__里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,myapp.py 就等同于一个库文件,直接被 gunicorn 调用即下面__name__部分就可以不用了。 gunicorn -w4 -b0.0.0.0:8000 myapp:app -D此时,我们需要用 8000 的端口进行访问,原先的5000并没有启用。其中 gunicorn 的部署中-w 表示开启多少个 worker,-b 表示 gunicorn 开发的访问地址。myapp 表示包含Flask(__name__) 对象的模块或者包app 表示实例化Flask(__name__) 的对象-D 在后台运行3:包结构和蓝图结构的启动方式(以包结构为例)A:项目目录结构$ tree.├── app│ ├── admin.py│ ├── __init__.py│ ├── static│ │ └── test.css│ ├── templates│ │ ├── admin.html│ │ └── views.html│ └── views.py├── config.py├── requirement.py└── run.py启动文件cat run.pyfrom app import appif __name__=="__main__":app.run(host='0.0.0.0',port=9898,debug=True)包文件$ cat app/__init__.pyfrom flask import Flaskapp = Flask(__name__)import views,admin视图文件cat app/views.pyfrom flask import render_templatefrom . import app@app.route('/views')def views():return render_template('views.html')B:flask开发模式下的启动方式python run.pyC: gunicorn启动gunicorn -w4 -b0.0.0.0:8089 app:appgunicorn -w4 -b0.0.0.0:9090 app:app --access-logfile /tmp/gunicorn.log --error-logfile /tmp/gun_error.log -D备注:第一个app: 表示app这个包名第二个app: 表示app包中 Flask(__name__)实例化的对象四:安装 supervisor上面想要结束 gunicorn 只需执行 pkill gunicorn,有时候还的 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器---supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。pip install supervisorecho_supervisord_conf > supervisor.conf   # 生成 supervisor 默认配置文件vim supervisor.conf                       # 修改 supervisor 配置文件,添加 gunicorn管理 在myapp supervisor.conf 配置文件底部添加[program:myapp]command=/home/lzp/venv/bin/gunicorn -w4 -b0.0.0.0:8000 myapp:app    ;supervisor启动命令directory=/home/lzp/myproject                                       ;项目的文件夹路径startsecs=0                                                         ; 启动时间stopwaitsecs=0                                                      ; 终止等待时间autostart=false                                                     ; 是否自动启动autorestart=false                                                   ; 是否自动重启stdout_logfile=/tmp/myproject/log/gunicorn.log                      ; 日常输出日志stderr_logfile=/tmp/myproject/log/gunicorn.err                      ; 错误日志 supervisor的基本使用命令supervisord -c supervisor.conf                             通过配置文件启动supervisorsupervisorctl -c supervisor.conf status                    察看supervisor的状态supervisorctl -c supervisor.conf reload                    重新载入 配置文件supervisorctl -c supervisor.conf start [all]|[appname]     启动指定/所有 supervisor管理的程序进程supervisorctl -c supervisor.conf stop [all]|[appname]      关闭指定/所有 supervisor管理的程序进程 supervisor 还有一个web的管理界面,可以激活。更改下配置[inet_http_server]         ; inet (TCP) server disabled by defaultport=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)username=user              ; (default is no username (open server))password=123               ; (default is no password (open server))现在可以使用 supervsior 启动 gunicorn啦。运行启动命令 supervisord -c supervisor.conf访问 http://127.0.0.1:9001 可以得到 supervisor的web管理界面,访问 http://127.0.0.1:2170 可以看见gunciron 启动的返回的 hello world五:安装配置 nginx代理server {listen 80;server_name www.xxx.comlocation /static {alias /usr/local/www.xxxx.com/static;}location / {proxy_pass http://127.0.0.1:9001;}}

 

转载于:https://www.cnblogs.com/nopnog/p/7028261.html

你可能感兴趣的文章
COMP0037 Coursework
查看>>
Spring Framework 5.x 学习专栏
查看>>
Linux 磁盘挂载和mount共享
查看>>
云计算开发教程,云计算能干什么?
查看>>
利用”+“、”-“JS字符串类型与数字类型转换
查看>>
【剑指offer面试题4】替换空格%20和清除空格
查看>>
【AtCoder】AGC032
查看>>
R学习-小白笔记07
查看>>
Apache Tez 0.7、0.83、 0.82 安装、调试笔记
查看>>
JAVA基础学习之路(五)数组的定义及使用
查看>>
利用Chrome模拟访问移动端网页
查看>>
20170505
查看>>
团队-科学计算器-团队一阶段互评
查看>>
ios触摸事件处理
查看>>
apache 整合svn
查看>>
Oracle 测试语句
查看>>
linux计划任务
查看>>
Egg 企业级应用开发框架的搭建
查看>>
input与button按钮背景图失效不显示的解决办法
查看>>
[Mac入门]如何在Mac下显示Finder中的所有文件
查看>>