首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Django学习1,从建立项目到使用nginx+uwsgi跑起来

2024-12-20 来源:化拓教育网

1.django用pip安装,装好后,在python里可以打印版本(建议还是下载一个1.11来安装,2.0目前看很多坑):

import django
# 能打印版本号说明安装成功啦!
django.VERSION

2.创建django项目,进入一个合适的文件夹,在终端(或者CMD)输入:

// 之所以能运行,是因为在django装好后,系统生成了django-admin指令
django-admin startproject firstblood

3.建立APP,命令行进入刚才建立的django项目文件夹,输入

// growup是小小的大招,暗喻建立这个项目是一个成长的过程
python manage.py startapp growup

这样项目中就多出了一个growup文件夹。

4.项目下与项目同名的文件夹是项目的配置文件夹,它包含以下几个文件:

  • settings.py:最重要的项目配置文件!与项目有关的所有配置都在这里,只要项目一跑起来这里面的配置都会生效,且先不管它是怎么实现的。看这个文件和看SSM框架的配置文件相比,简直不要舒爽太多!其中要做如下操作:
ALLOWED_HOSTS = ['*']
INSTALLED_APPS += 'growup'
MIDDLEWARE -= 'django.middleware.csrf.CsrfViewMiddleware'
TIME_ZONE = 'Asia/Shanghai'

# 数据库要改成自己的MYSQL数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'HOST':'121.40.888.888',
        'PORT':'3306',
        'USER':'root',
        'PASSWORD':'root',
    }
}

# 强制在项目中每个链接必须写全,不自动加斜杠(不影响手输网址)
APPEND_SLASH = False

# session过期时间
SESSION_COOKIE_AGE = 72000

# 预计可以实现每次触发方法就刷新session
SESSION_SAVE_EVERY_REQUEST = True

# 浏览器关闭后自动清除session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
  • wsgi.py:这个是服务器接口配置文件,在部署的时候会用到,要全文改成如下内容:
import os, sys
from django.core.wsgi import get_wsgi_application

# 1.增加系统环境变量,使uwsgi能够找到配置文件
os.environ['DJANGO_SETTINGS_MODULE'] = 'upload_multi.settings'

# 2.在django项目对python模块的搜索路径中,插入项目路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)

# 3.得到应用,使得settings文件能够定位到这里
application = get_wsgi_application()
  • urls.py:这个文件用于配置每一个地址所对应的函数,建议每一个地址都用'^/'包括起来,这样就不会出现识别错误的问题,显得很严谨。Django2.0会推荐使用path方法而不是url,个人感觉这个不好用,还是用url吧。注:如果项目中的链接比较多,可以用数组拼接的方式分模块写,并写好注释。但如果这个文件超过1000行,那一定是项目的设计非常辣鸡!

5.既然刚才在项目中配置好了数据库,那我们就来尝试创建数据库的实例。打开命令行在项目下输入

python manage.py inspectdb > 1.py

这样就会生成1.py这个model文件,然后将其中需要用到的表复制到APP下的models.py文件中。之所以不直接生成在目标文件上是因为有的时候生成的ORM是有问题的。

6.把APP文件夹中除了views和models文件之外的文件都干掉,因为目前来看都用不上,这样干净了以后,创建templates和static文件夹,前者用于存放html文件,后者存放css和js文件。至于这两个文件夹为什么叫这个名字,也是settings中配置的,一般不要动。

7.在本机把项目跑起来。我们在建立了一个超小型的带静态文件的后端渲染函数后,可以使用如下命令在本机把项目跑起来

# 0.0.0.0的意思是接受外网访问
python manage.py runserver 0.0.0.0:8000

注:如果访问地址时出现django_session找不到,那么先运行一次python manage.py migrate,把django的session机制需要的表迁移到数据库中。

8.使用uwsgi+nginx把项目跑起来。这里是两个服务器,原理是nginx自行处理静态文件,但是将请求分发给uwsgi处理。先让uwsgi跑起来。
<1>. 在项目配置文件夹下创建一个uwsgi_project.ini:

# 既然用了python,能用ini当然不要再用xml了
# 这一行配置头一定要加,不然无法识别配置内容
[uwsgi]
http = :8001
socket = :8077
chdir = /home/innovation/python_code/project/project
module = wsgi
# 这个属性很NB,能够使uwsgi托管到后台,runserver就做不到!
daemonize = circumstance.log
# 这个太重要了,木有这个那每次改代码只能重启了,而且重启还成功率有限
py-autoreload = 1

<2>. sudo pip install uwsgi。这里我们也可以非常装逼地使用sudo pip install uwsgi --upgrade,即如果已经存在了,就更新。
<3>. 测试一下是否能用uwsgi来跑刚刚修改过的wsgi.py

uwsgi uwsgi_project.ini

如果能访问一个没有样式的网站就说明成功了。这里要提到的是,如果起跑之后想把它干掉,就不像关闭nginx那样有专门的指令。需要ps -ef然后kill -9。当然这样的操作一般不会用到,所以麻烦一点也没关系。

9.使用nginx
<1>. 安装nginx,命令如下,但是一般Linux系统上都装了这个了。

sudo apt-get install nginx

<2>. 编写nginx的配置文件。我们的nginx一般是装在/etc/nginx路径下的。这下面有一个sites-available文件夹和一个sites-enabled文件夹。后者文件是前者的硬链接,所以只需要改前者文件夹的文件即可。但这里要注意了,改可以,但如果是新增配置文件,一定要记得在写完之后ln到enabled中。我们输入sudo gedit default然后:

# 在这个配置文件中,最重要的是说明3点
# 1.网址端口号
# 2.访问路由时,跳转的uwsgi地址
# 3.访问静态文件时,跳转的路径
server {
    listen 8000;
    # 这里我听到的说法是,如果有域名就写网址,如果没有就随便起一个名,但不能不写
    server_name gogogo;

    location / {
        # 标明socket跳转地址
        uwsgi_pass 127.0.0.1:8077;
        # 这一行决定nginx和uwsgi的连接!如果不放心可以写成include /etc/nginx/uwsgi_params;
        include uwsgi_params;
    }

    # 这里我只配置了一个css和js的静态文件路径,如果需要png和mp3,再另外配置一个media,方法相同
    location /static {
        alias /home/innovation/python_code/django_oa/bonus/static;
    }
}

<3>. 终于来到最后一步了,启动nginx!注意,nginx必须启动在超级管理员下,这点与uwsgi不同。

# 如果还没有启动,输入
sudo nginx
# 如果已经启动了,输入
sudo nginx -s reload
# 如果单纯想停止,输入
sudo nginx -s stop
显示全文