2022年 11月 8日

python搭建web服务过程

python搭建web服务过程

  • 下载anacanda
  • 安装anacanda
  • 测试
  • 安装虚拟环境
  • 安装pip
  • 使用python连接MongoDB
  • 使用python搭建web服务
    • 安装flask
    • server端代码如下
    • 启动服务
    • 验证服务
      • 客户端代码client.py
      • 启动client端
      • client端log如下:
      • 修改pip源

下载anacanda

官网下载太慢:官网下载
可以到国内镜像下载:镜像下载地址

安装anacanda

运行命令:

bash Anaconda3-2018.12-Linux-x86_64.sh
  • 1

然后开启安装,在安装过程中,基本上不断按回车或者yes默认就行了。
在这里插入图片描述
设置环境变量

vi /etc/profile
  • 1
#Anaconda
export PATH=$PATH:/home/software/anaconda3/bin
  • 1
  • 2
source /etc/profile
  • 1

测试

打开终端(Terminal),输入python3,如果显示如下图,则表示安装成功。

[root@slthtbijdqe ancanda]# python3 -V
Python 3.8.5
  • 1
  • 2

安装虚拟环境

安装成功后需要创建新的虚拟环境:

  1. 首先在所在系统中安装Anaconda。可以打开命令行输入conda -V检验是否安装以及当前conda的版本。

  2. conda常用的命令。

    1)conda list 查看安装了哪些包。

    2)conda env list 或 conda info -e 查看当前存在哪些虚拟环境

    3)conda update conda 检查更新当前conda

  3. 创建python虚拟环境。

    使用 conda create -n your_env_name python=X.X(2.7、3.6等)命令创建python版本为X.X、名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。

  4. 使用激活(或切换不同python版本)的虚拟环境。

    打开命令行输入python –version可以检查当前python的版本。

    使用如下命令即可 激活你的虚拟环境(即将python的版本改变)。

    Linux: source activate your_env_name(虚拟环境名称)

    Windows: activate your_env_name(虚拟环境名称)

    这是再使用python –version可以检查当前python版本是否为想要的。

  5. 对虚拟环境中安装额外的包。

    使用命令conda install -n your_env_name [package]即可安装package到your_env_name中

  6. 关闭虚拟环境(即从当前环境退出返回使用PATH环境中的默认python版本)。

    使用如下命令即可。

    Linux: source deactivate

    Windows: deactivate

  7. 删除虚拟环境。

    使用命令conda remove -n your_env_name(虚拟环境名称) –all, 即可删除。

  8. 删除环境中的某个包。

    使用命令conda remove –name your_env_name package_name 即可。

安装pip

创建虚拟环境,命名为python3.6

 conda create -n python3.6 python=3.6
  • 1

切换虚拟环境

source activate python3.6
  • 1

pip是python的包管理工具,安装pip

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   # 下载安装脚本
$ sudo python get-pip.py    # 运行安装脚本
  • 1
  • 2

使用python连接MongoDB

安装

[root@slthtbijdqe anaconda3]# source activate python3.6
(python3.6) [root@slthtbijdqe anaconda3]# python -V
Python 3.6.12 :: Anaconda, Inc.
(python3.6) [root@slthtbijdqe anaconda3]# python -m pip install pymongo
  • 1
  • 2
  • 3
  • 4

编写的实例read.py:

#!/usr/bin/python
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:8008/")
dblist = myclient.list_database_names()
print(dblist)
for db in dblist:
        print ("dbname:%s" %(db) )
testDb=myclient['test']
print(testDb)
mycollection=testDb["test"]
print(mycollection)
for x in mycollection.find():
  print(x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行read.py

python read.py
  • 1

输出如下:

['admin', 'config', 'local', 'mbg', 'mbg_test', 'test']
dbname:admin
dbname:config
dbname:local
dbname:mbg
dbname:mbg_test
dbname:test
Database(MongoClient(host=['localhost:8008'], document_class=dict, tz_aware=False, connect=True), 'test')
Collection(Database(MongoClient(host=['localhost:8008'], document_class=dict, tz_aware=False, connect=True), 'test'), 'test')
{'_id': ObjectId('5ff81dddb5fb103b56db1751'), 'title': 'this is update test'}
{'_id': ObjectId('5ff81dfbc945da0e62b4e908'), 'title': 'test'}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用python搭建web服务

安装flask

pip install flask
  • 1

server端代码如下

编写代码server.py,内容如下:

 #!/usr/bin/python

from flask import Flask,jsonify,request,abort
import json
import logging
from logging.handlers import RotatingFileHandler
from threading import Thread
import time

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return '<h1>Home</h1>'

@app.route('/signin', methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
              <p><input name="username"></p>
              <p><input name="password" type="password"></p>
              <p><button type="submit">Sign In</button></p>
              </form>'''

@app.route('/signin', methods=['POST'])
def signin():
    try:
        app.logger.info(request.headers)
        app.logger.info(type(request.json))
        app.logger.info(request.json)
        app.logger.info(request.json['name'])
        data=request.data
        app.logger.info(data)
    except BaseException :
        app.logger.error("发生了异常")
        return '<h3>Bad request param .</h3>'
    else:
    # 需要从request对象读取表单内容:
        t = Thread(target=sayhi, args=('caoyong','to you',"线程号1"))
        t.start()
        result={"name":request.json['name']}
        return result 


def sayhi(name,input,number):
    for i in range(1,10):
        if number == "线程号1":
            time.sleep(1)
            app.logger.info("这是线程号:%s - %s say hello %s - %s" % (number,name, str(i),input))
        else :
            time.sleep(1)
            app.logger.info("线程号:%s - %s say hello %s - %s 休息1秒" % (number,name, str(i),input))


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=30003,debug=True)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

启动服务

后台启动server端服务,日志重定向到nohup中

nohup python server.py 2>&1 &
  • 1

验证服务

客户端代码client.py

from urllib import parse, request
import json
 
parameter = {"name": "caoyong111"}
# json串数据使用
parameter = json.dumps(parameter).encode(encoding='utf-8')
# 普通数据使用
# parameter = parse.urlencode(parameter).encode(encoding='utf-8')
print('入参:' + str(parameter))
 
header_info = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',"Content-Type": "application/json"}
url = "http://localhost:30003/signin"
req = request.Request(url=url, data=parameter, headers=header_info)
res = request.urlopen(req)
res = res.read()
 
print('返回参数:' + str(res))
print('返回参数,转码utf-8后:' + str(res.decode(encoding='utf-8')))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

启动client端

python client.py
  • 1

client端log如下:

在这里插入图片描述
查看服务端log

tail -f nohup
  • 1

log内容如下:在这里插入图片描述
可以看到服务端同步返回报文,启动线程执行异步任务

如果anconda下载不下来的话,需要将.condarc修改成如下内容:

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
show_channel_urls: true
#去掉-default
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

修改pip源

修改.conf(Linux)/.ini(Windows)
Linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)。输入或修改内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
  • 1
  • 2
  • 3
  • 4

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,然后新建文件pip.ini,即 %HOMEPATH%\pip\pip.ini,输入或修改内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
  • 1
  • 2
  • 3
  • 4

2.2 命令提示符
直接一行代码搞定

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
1
下面提供常用的一些国内镜像源

阿里云 http://mirrors.aliyun.com/pypi/simple/
豆瓣http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学http://pypi.hustunique.com/

原文链接:https://blog.csdn.net/weixin_42640909/article/details/112142215