本地开发django项目

https://docs.djangoproject.com/en/1.11/

*django-admin startproject collect_site                                                    创建项目collect_site的目录

*python manage.py runserver                                                                     启动网页

*python manage.py startapp books                                                             创建项目单个应用app目录

 

*在models.py中创建数据模型,例

class MyUser(models.Model):
  username=models.CharField(max_length=50,unique=True)
  password=models.CharField(max_length=50,null=False)

 

*配置数据库连接相关信息

django默认使用sqlite作为数据库,配置数据库为mysql:

在与项目同名的app目录下的__init__.py中添加:

import pymysql

pymysql.install_as_MySQLdb()

在settings.py中设置

DATABASES={

‘default':{

'ENGINE':'django.db.backends.mysql',

'NAME':'mydb',

'USER':'root'

'HOST':'localhost',

'PORT':3306,

'PASSWORD':'mypassword'

},}

*在数据库中创建模型中定义的表有两种方式

1.使用django的数据迁移功能   

python manage.py makemigrations books                                                   生成app books的模型创建语句

python manage.py migrate                                                                        根据生成的模型创建语句,创建表

python manage.py sqlmigrate books 0002                                                查看应用于模型的sql语句  (

如果要变更表结构,需要确保变更前有makemigrations, 后面的makemigrations都是在前一个版本的基础上生成对应修改的sql语句 

2.手动在数据库中创建与models.py中模型相对应的表

数据库中的表名格式为  app名+’_'+模型名 ,全为小写。

数据库中表字段名与模型中变量名一致,全为小写

至此 ,配置完成,可以开始编写views.py和urls.py的编写:函数处理与映射url的设置.

为项目添加git

在git的远程服务器上新建一个项目仓库

git init -bare collect.git ,创建完后将新建文件collect.git的所有权改为git,不然本地没有权限推送

在本地项目目录中初始化git仓库

git init 

将不需要跟踪的文件添加到.gitignore文件中,例 static/将忽略所有目录下的static文件夹;*.pyc将忽略所有扩展名为pyc的文件

git add . 将项目文件中的所有文件都加入追踪(不包含.gitignore中的标记目录)

git commit -m "some project init"   提交项目存档

git remote add origin git@120.345.34.9:/home/git/collect.git                    将本地git项目关联到远程服务器上的git仓库

git push --force --set-upstream origin master                                            首次将本地git关联的项目推送到远程git仓库

 

 

 

 

*将静态文件自动收集到一个目录下

可以使用python manage.py collectstatic,       (需提前在settings.py中设置收集存放的目录 STATIC_ROOT = os.path.join(BASE_DIR, "static/")

也可手动将静态文件复制到指定目录

 

 

在生产环境中部署django

*settings.py中需更改为

DEBUG = False
ALLOWED_HOSTS = ['*'](也可将配置的域名加进去)

*创建虚拟环境  virtualenv collect_env

在windows上开启虚拟环境 collect_env/scripts/activate

退出虚拟环境 deactivate 

虚拟环境中不能使用外面安装的包,需要单独安装

pip install django==1.11.7等等(也可以使用 pip install -r requirements.txt 一键安装requirements.txt中记录的安装包,pip freeze > requirements.txt 用于创建requirements.txt)

 

*将测试数据库中的表结构复制到生产数据库,

*settings.py中的数据库连接配置改成生产数据库配置

*从git远程仓库拉取代码                         git clone git@120.324.13.49:/home/git/collect.git

 

1. 使用 python manage.py runserver   0.0.0.0:8000  运行网页,0.0.0.0用于让django自带的server监听所有IP的访问,不仅是本地的访问

在生产环境中settings.py的DEBUG需设置成False,由此django的server可能就不支持静态文件,需要添加 --insecure

并在settings.py中指定静态文件的目录STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"),os.path.join(BASE_DIR,"books","static"),]与路由地址STATIC_URL='/static/' 

python manage.py runserver --insecure 0.0.0.0:8000

因为django的默认在生产环境中不支持静态文件。

 

2.在windows server 2008上部署django,使用iis作为server,来启动django网页。

配置iis

pip install wfastcgi  安装sfastcgi模块

将python的site-package目录下的wfastcgi.py复制到项目的根目录下

打开windows上的开始-管理工具-internet信息服务(iis)管理器 ,在左边的 网站  目录上右击添加网站。

物理路径为项目根目录,网站名称自定义,端口自定义,其他保持默认设置。

创建FastCGI,点击左侧     网站-刚添加的网站   ,双击右侧的“处理程序映射”(注,不要在iis控制台直接点击,不然创建的FastCGI会对所有网站生效),点击弹窗右侧的“添加模块映射”。

请求路径 : *

模块: FastCgiModule

可执行文件:python.exe路径|项目目录下的wfastcgi.py路径

名称:自定义

请求限制: 映射下的单选框 -仅当请求映射至一下内容时才调用处理程序: 保持未勾选状态

依次点击确定退出。

进入iis控制台(左边的网站上级目录),双击FastCGI设置,双击弹窗右边的,之前创建的那条fastCgi,在弹窗里编辑“环境变量” django执行时的环境变量有3个:
WSGI_HANDLER :django.core.wsgi.get_wsgi_application()

PYTHONPATH:项目根目录

DJANGO_SETTINGS_MODULE:项目根目录名.settings

添加完成后重启iis或去应用程序池回收一下就好,网站已能正常访问。

iis由于权限 问题无法访问 python Failed to open the data source: Permission denied

将项目目录的文件属性,安全,用户中添加 iis_iusers用户,权限为可读,可写。若还是出现无访问权限,将python.exe的目录文件夹权限中也做相应的iis_iusers的权限添加。

iis上的静态文件目录

在网站目录下选中静态文件的目录,双击右边的“处理程序映射”,将弹窗中的中部的条目中之前创建的FastCgi删除,即可.(右侧的“恢复为父项”可以恢复对此目录的修改)

如果静态文件夹的路径在项目路径外,则可以在网站目录下添加虚拟目录,然后在静态文件夹目录下添加web.config文件即可:

<?xml version="1.0" encoding="UTF-8"?>

 

<configuration>

 

<system.webServer>

 

<!-- this configuration overrides the FastCGI handler to let IIS serve the static files -->

 

<handlers>

 

<clear/>

 

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />

 

</handlers>

 

</system.webServer>

 

</configuration>

 iis的服务器缓存设置,可选中对应的网站目录,然后选择右边的 功能视图中 “HTTP响应头标” ,--->“设置常用标头" 勾选使web内容过期,选择对应的过期间隔时间 即可

 

3.在linux  centos 上部署 django ,使用 gunicorn+nginx 来启动网页

*安装gunicorn ,                pip install gunicorn 

*安装nginx                     yum install nginx

*配置启动nginx

启动nginx   ./nginx ,

*如果是阿里云上的服务器,除了要打开防火墙,对于需要打开的端口,还在在安全组中添加。

*配置nginx ,简单将 /usr/local/nginx/conf/nginx.conf中的http{server {location /static {},location / {}}编辑即可

location / static {alias 项目静态文件夹目录;}  #设置静态文件地址

location / { proxy_set_header Host $host; #用于让gunicorn 和django知道他们运行在哪个域名下

proxy_pass http://unix:/tmp/superlists.socket;} #设置 将请求转移到哪个地址 ,如果运行gunicorn时的监听地址为127.0.0.1:8000,则此处proxy_pass的值应设置为 http://127.0.0.1:8000

*为了让nginx能访问静态文件,要将conf文件中的 第一行 user anyone 的anyone设置成具有访问静态文件夹权限的用户,设置为root就可以了。

修改了nginx的配置文件要重新加载一下配置 , nginx -s reload ,启动nginx , nginx(含全路径)

 

*配置启动gunicorn (gunicorn安装在虚拟环境中)

进入项目根目录    ../virtualenv/bin/gunicorn  --bind / -b 127.0.0.1:8000 superlists.wsgi:application ,其中superlists.wsgi表示项目根目录下的与根目录同名的app-superlists下面的wsgi.py文件.

关闭gunicorn ,先查询出进程号,再使用 kill -QUIT 进程号 ,杀掉进程。

也可在项目根目录下 创建文件 gunicorn.conf,并把它设置为可执行的文件,./gunicorn.conf 来启动

[...]

exec ../virtualenv/bin/gunicorn \

        --bind unix:/tmp/superlists.socket \

        --access-logfile ../access.log \

       --error-logfile ../error.log ]

       superlists.wsgi:application

即可通过外网访问了。

 posted on 2018-08-21 18:09  庭明  阅读(164)  评论(0编辑  收藏  举报