[python] flask + ngnix

文本记录了当使用python+flask的应用时,如何配合ngnix实现通过80端口访问,从而也就可以使用域名直接访问python app。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

评论中有502错误解决方法。

如果有多个app,virtualenv可以共用,只要在service的路径里面写上实际路径即可

virtualenv webprojectenv

source webprojectenv/bin/activate

502

For those that have the 502 gateway error try changing chmod-socket = 660

uwsgi_pass unix:///home/sammy/myproject/myproject.sock;

 

假设目录为test1

运行create.sh

createsh test1
source myprojectenv/bin/activate
增加.py or template

测试是否正常

  1. uwsgi –socket 0.0.0.0:5000 –protocol=http -w wsgi:app

 

如下代码存为create.sh, 即使目录存在,也可以使用此脚本重新配置

if [ $# -ne 1 ]
then
echo “Error input, must be a project name”
exit
fi

NAME=$1
DIRNAME=$1
echo $NAME
mkdir ${NAME}
#NAME=$1/$1
echo “[uwsgi]” > ${NAME}.ini
echo “module = wsgi:app” >> ${NAME}.ini
echo “” >> ${NAME}.ini
echo “master = true” >> ${NAME}.ini
echo “processes = 1” >> ${NAME}.ini
echo “”>>${NAME}.ini
echo “socket = ${NAME}.sock”>>${NAME}.ini
echo “chmod-socket = 666”>>${NAME}.ini
echo “vacuum = true”>>${NAME}.ini
echo “”>>${NAME}.ini
echo “die-on-term = true”>>${NAME}.ini
mv ${NAME}.ini $DIRNAME/

echo “============================”
echo “from ${NAME} import app” > wsgi.py
echo “”>>wsgi.py
echo “if __name__ == \”__main__\”:”>>wsgi.py
echo ” app.run()” >> wsgi.py
mv wsgi.py $DIRNAME
cp ./dict/webprojectenv $DIRNAME -rf

echo “============================”
echo “[Unit]”> ${NAME}.service
echo “Description=uWSGI instance to serve ${NAME} api”>>${NAME}.service
echo “After=network.target”>>${NAME}.service
echo “[Service]”>>${NAME}.service
echo “User=sunny”>>${NAME}.service
echo “Group=www-data”>>${NAME}.service
echo “WorkingDirectory=/home/sunny/webproject/${NAME}”>>${NAME}.service
echo “Environment=\”PATH=/home/sunny/webproject/${NAME}/webprojectenv/bin\””>>${NAME}.service
echo “ExecStart=/home/sunny/webproject/${NAME}/webprojectenv/bin/uwsgi –ini ${NAME}.ini”>>${NAME}.service
echo “[Install]”>>${NAME}.service
echo “WantedBy=multi-user.target”>>${NAME}.service
echo “============================”
mv ${NAME}.service $DIRNAME/
sudo cp ./${DIRNAME}/${NAME}.service /etc/systemd/system
sudo cp ./${DIRNAME}/${NAME}.service /etc/systemd/system
sudo systemctl start ${NAME}
sudo systemctl enable ${NAME}
sudo systemctl status ${NAME}
sudo systemctl restart nginx

[python] flask jinja HTML模板语法记录

Flask使用的是jinja模板,记录一下常用的语法

判断传入的dict/list是否为空
{% if input%}
定义一个变量值
{%set a = 0%}
获取输入list length
{%set a = (phr)|length%}
list循环
{% for row in input%}
{{row}}
{% endfor %}
dict打印
{% for k,v in input.items() %}
{{k}}
{{v}}
{% endfor %}
或者
{% {{input[‘key’]}}%}

if判断
{% if (a)>=16 %}
{% elif (a)<0 %}
{% else%}
{% endif%}
for循环
{% for a in range(0,10,2)%}
{% endfor %}
字符串拼接
{%set url = “https://sunjw.cn/html5/flight/swift/domestic/” ~ “AAA” ~ row[0] %}

循环里自加计数
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}

[python]使用苹果自带的快捷方式实现常用青岛公交查询

青岛工具查询的方式有多种,我经常使用的是微信小程序中的“青岛工具查询”。因为每天早晨上班都要查公交到哪一站便于出门,但是这种查询方式有点麻烦,于是就有了此方法。

我使用了青岛新闻网的公交查询接口,http://bus.qingdaonews.com/m/

http://bus.qingdaonews.com/m/detail.php?rid=128&isjson=1   用于查询128路所有站点名称及站名id及segment id,站名id与segment id用于后面具体的车辆位置查询。

http://bus.qingdaonews.com/m/detail_ajax.php?rid=128&smid=8525754&id=27
用于查询具体的最近的两辆公交信息,如果直接输入浏览器效果如下

理论上来说,将上述地址写到苹果的快捷方式里面的web-Get contents of URL就可以拿到信息了,但是这样可读性太差,于是我在我的vps上把返回数据格式变了一下,然后,跟默认只查询2辆车不同,我查询了两次,从而实现了最近的4辆车的信息的返回。

最后可以使用快捷方式里面的获取字典或者列表的方式将数据拿到通过弹出对话框显示。
最终结果如下: