Python的WEB框架
Django(组件最全、最强大的框架,主要用于后端服务管理、运维)
例如后台
Flask(小巧的、灵活的框架、可以快速开发API接口)
例如网站
Tornado(基于单线程的框架实现非阻塞的网络框架)
例如在线客服系统
x项目文件准备、Django框架安装
# 上传Django案例代码
[root@demo ~]# mkdir pyproject
[root@demo ~]# cd pyproject/
[root@demo pyproject]# ls learning_logs.zip
learning_logs.zip
[root@demo pyproject]#
# 创建并激活虚拟环境pyenv
[root@demo pyproject]# ls
learning_logs.zip
[root@demo pyproject]# python3 -m venv pyenv #创建pyenv虚拟环境
[root@demo pyproject]# ls
learning_logs.zip pyenv
[root@demo pyproject]# source pyenv/bin/activate #激活pyenv虚拟环境
(pyenv) [root@demo pyproject]# python3 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ #更新pyenv虚拟环境中pip版本
(pyenv) [root@demo pyproject]# python3 -m pip --version
pip 21.3.1 from /root/pyproject/pyenv/lib64/python3.6/site-packages/pip (python 3.6)
# 解压项目代码
(pyenv) [root@demo pyproject]# unzip learning_logs.zip #解压项目代码
(pyenv) [root@demo pyproject]# ls
learning_logs learning_logs.zip pyenv
(pyenv) [root@demo pyproject]# cd learning_logs/ #切入项目目录
(pyenv) [root@demo learning_logs]# ls
learning_log learning_logs manage.py requirement.txt users
# 安装项目相关模块
(pyenv) [root@demo learning_logs]# python3 -m pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
(pyenv) [root@demo learning_logs]# python3 -m pip list
Package Version
----------------- -------
Django 1.11.8
django-bootstrap3 11.0.0
pip 21.3.1
pytz 2022.6
setuptools 39.2.0
(pyenv) [root@demo learning_logs]#
Django项目即时运行
#创建数据库和表
(pyenv) [root@demo learning_logs]# ls manage.py
manage.py #项目管理文件
(pyenv) [root@demo learning_logs]# ls learning_log/settings.py
learning_log/settings.py #项目配置文件
(pyenv) [root@demo learning_logs]# ls
learning_log learning_logs manage.py requirement.txt users
(pyenv) [root@demo learning_logs]# python3 manage.py migrate #调用learning_logs/models.py文件创建数据库
Operations to perform:
Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying learning_logs.0001_initial... OK
Applying learning_logs.0002_entry... OK
Applying learning_logs.0003_topic_owner... OK
Applying sessions.0001_initial... OK
(pyenv) [root@demo learning_logs]# ls
db.sqlite3 learning_log learning_logs manage.py requirement.txt users
(pyenv) [root@demo learning_logs]#
#即时运行Django项目(前台进程,占用终端)
(pyenv) [root@demo learning_logs]# python3 manage.py runserver 0.0.0.0:8000
Performing system checks...
System check identified no issues (0 silenced).
July 02, 2023 - 21:31:23
Django version 1.11.8, using settings 'learning_log.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
uWSGI案例
uWSGI安装
#安装依赖包
(pyenv) [root@demo learning_logs]# yum -y install gcc python36-devel
#使用pip工具安装uWSGI
(pyenv) [root@demo learning_logs]# python3 -m pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple/
#确认uWSGI安装成功
(pyenv) [root@demo learning_logs]# python3 -m pip list | grep -i uwsgi
uWSGI 2.0.21
(pyenv) [root@demo learning_logs]# uwsgi --version
2.0.21
(pyenv) [root@demo learning_logs]#
uWSGI测试
#编写uWSGI测试页面
(pyenv) [root@demo learning_logs]# vim testuWSGI.py
(pyenv) [root@demo learning_logs]# cat testuWSGI.py
def application(env, res):
res = ('200 OK', [('Content-Type','text/html')])
return [b'hello world\n']
#启动uWSGI测试程序
(pyenv) [root@demo learning_logs]# uwsgi --http 127.0.0.1:8001 --wsgi-file testuWSGI.py &
[1] 358449
(pyenv) [root@demo learning_logs]#
(pyenv) [root@demo learning_logs]# ss -antpul | grep 8001
tcp LISTEN 0 100 127.0.0.1:8001 0.0.0.0:* users:(("uwsgi",pid=358450,fd=7),("uwsgi",pid=358449,fd=7))
(pyenv) [root@demo learning_logs]#
#访问uWSGI运行效果
(pyenv) [root@demo learning_logs]# curl http://localhost:8001/
hello world
[pid: 358449|app: 0|req: 1/1] 127.0.0.1 () {28 vars in 292 bytes} [Sun Jul 2 21:56:10 2023] GET / => generated 12 bytes in 0 msecs (HTTP/1.1 500) 0 headers in 0 bytes (1 switches on core 0)
(pyenv) [root@demo learning_logs]#
#清理uWSGI测试页面
(pyenv) [root@demo learning_logs]# ss -antpul | grep :8001
tcp LISTEN 0 100 127.0.0.1:8001 0.0.0.0:* users:(("uwsgi",pid=358450,fd=7),("uwsgi",pid=358449,fd=7))
(pyenv) [root@demo learning_logs]# kill -9 358449 #杀较小的pid号(父进程号)
(pyenv) [root@demo learning_logs]# ss -antpul | grep :8001
(pyenv) [root@demo learning_logs]# rm -rf testuWSGI.py
使用uWSGi运行Django项目
配置uWSGI
#编写uWSGI运行项目配置文件
(pyenv) [root@demo learning_logs]# ls
db.sqlite3 learning_log learning_logs manage.py requirement.txt users
(pyenv) [root@demo learning_logs]# vim logs.ini
(pyenv) [root@demo learning_logs]# cat logs.ini
[uwsgi]
http=0.0.0.0:8000 #监听网络及端口
chdir=/root/pyproject/learning_logs/ #项目根目录,managr.py所在目录
wsgi-file=/root/pyproject/learning_logs/learning_log/wsgi.py #wsgi文件,settings.py平级别
vacuum=True #自动移除pid文件
daemonize=/var/log/logs.log #后台运行服务且日志记录到指定文件
pidfile=/var/run/logs.pid #pid文件存储位置
测试uWSGI运行Django项目
(pyenv) [root@demo learning_logs]# uwsgi --ini logs.ini #启动uWSGI服务
[uWSGI] getting INI configuration from logs.ini
(pyenv) [root@demo learning_logs]# ss -antpul | grep uwsgi #确认8000端口监听
tcp LISTEN 0 100 127.0.0.1:37373 0.0.0.0:* users:(("uwsgi",pid=361623,fd=6))
tcp LISTEN 0 100 0.0.0.0:8000 0.0.0.0:* users:(("uwsgi",pid=361624,fd=7),("uwsgi",pid=361623,fd=7))
(pyenv) [root@demo learning_logs]# pstree -p | grep uwsgi
`-uwsgi(361623)---uwsgi(361624)
(pyenv) [root@demo learning_logs]#
浏览器访问测试
#停止uWSGI服务
(pyenv) [root@demo learning_logs]# uwsgi --stop /var/run/logs.pid
(pyenv) [root@demo learning_logs]# ss -antpul | grep 8000
(pyenv) [root@demo learning_logs]#
评论区