开始一个django工程

Posted huanhuaqingfeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开始一个django工程相关的知识,希望对你有一定的参考价值。

1,创建工程

      cd 到你想创建工程的目录。执行如下命令      

   django-admin startproject HelloWorld

      创建了工程HelloWorld

 

     查看工程HelloWorld,目录结构如下:

    技术图片

    HelloWorld: 项目的容器 
    manage.py: 命令行工具,用于和Django交互 
    HelloWorld/init.py:空文件,告诉python,该目录是一个Python包 
    HelloWorld/setting.py : 对该项目的配置文件 
    HelloWorld/urls.py : 该项目的url声明 
    HelloWorld/wsgi.py : 服务器入口

 

2,  创建应用

     在工程HelloWorld下,创建应用learn     

   django-admin startapp learn

     或者

     python manage.py startapp learn

 

 

3   在开发服务器上运行工程 (仅用于开发)   

 python manage.py runserver

     在本地浏览器中输入http://127.0.0.1:8000,查看HelloWorld 工程的运行页面。     

 python manage.py runserver 0.0.0.0:8000

     0.0.0.0 表示监控电脑的所有的ip地址,8000 是端口,可自配。

 

 

4   uwsgi 运行项目

     uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi

     --home 指定virtualenv 路径,如果没有可以去掉。project.wsgi 指的是 project/wsgi.py 文件

 

5 使用supervisor

   1,  生成 supervisor 默认配置文件,比如我们放在 /etc/supervisord.conf 路径中,root 用户执行

       echo_supervisord_conf > /etc/supervisord.conf

   2,supervisor.conf 在最底部添加

        [program:zqxt]

   command=/path/to/uwsgi --http :8003 --chdir /path/to/zqxt --module zqxt.wsgi
   directory=/path/to/zqxt
   startsecs=0
   stopwaitsecs=0
   autostart=true
   autorestart=true
   3.,启动 supervisor
        (sudo) supervisord -c /etc/supervisord.conf
   4, 启动,停止,或重启 supervisor 管理的某个程序 或 所有程序
          (sudo) supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
 
    5,使用 ini 配置文件来实现上述功能
         在项目zqxt 中建/home/tu/zqxt/uwsgi.ini输入如下:
         [uwsgi]
   socket = /home/tu/zqxt/zqxt.sock
 
   chdir = /home/tu/zqxt
 
   wsgi-file = zqxt/wsgi.py
 
   touch-reload = /home/tu/zqxt/reload
 
 
 
   processes = 2
 
   threads = 4
 
 
 
   chmod-socket = 664
 
   chown-socket = tu:www-data
 
 
 
   vacuum = true
         接着修改 supervisor 配置文件中的 command 一行:
         command=/path/to/uwsgi --ini /home/tu/zqxt/uwsgi.ini
         最后重启zqxt 项目:
   (sudo) supervisorctl -c /etc/supervisord.conf restart zqxt
 

 

FAQ:

    1,浏览器访问报错

      Invalid HTTP_HOST header: ‘192.168.1.111:8000‘. You may need to add ‘192.168.1.111‘ to ALLOWED_HOSTS

      解决方法:

      在工程setting.py 中更改 ALLOWED_HOSTS = [‘*‘]

 

    2,如何添加应用到工程中

        将我们新建的应用(learn)添加到工程的 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用

         INSTALLED_APPS = (

    ‘django.contrib.admin‘, 
    ‘django.contrib.auth‘, 
    ‘django.contrib.contenttypes‘, 
    ‘django.contrib.sessions‘, 
    ‘django.contrib.messages‘, 
    ‘django.contrib.staticfiles‘, 
    ‘learn‘, 
     )
     3,如何更换数据库
           django默认使用的数据库是sqlite3,如果你想改成mysql或者其他数据库的话,需要则在project的settings.py文件中修改DATABASES
           
           sqlite 数据库配置

           DATABASES =

                ‘default‘:

                ‘ENGINE‘: ‘django.db.backends.sqlite3‘,

                ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
               
         

        mysql数据库配置

 

        DATABASES =
                   ‘default‘:
                  ‘ENGINE‘: ‘django.db.backends.mysql‘,
                  ‘NAME‘: ‘hellodatabase‘,
                  ‘USER‘: ‘zhj‘,
                  ‘PASSWORD‘: ‘12345678‘,
                  ‘HOST‘: ‘127.0.0.1‘,
                  ‘PORT‘: ‘5432‘,
                 
         

 

         注:  django默认使用MySQLdb模块连接mysql。但是在python3中没有这个模块只有python2中有这个模块,python3只有pymysql模块,所以我们需要主动修改为pymsql:

  
  在project同名文件下的__init__.py文件中添加如下代码即可
 
  import pymysql
  pymysql.install_as_MySQLdb()
       生成数据库表:
      

       打开终端输入这两条命令:
  1,python manage.py  makemigrations

     2,python manage.py  migrate

  通过python manage.py  makemigrations 找到我们所有的models,然后通过python manage.py  migrate生成数据库表,

    

    4  service supervisor start  启动报错

          Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting superviso

          解决方法:unlink /tmp/supervisor.sock

          原因:这个进程可以已经启动了,再启动需要先unlink 以前的。

 

   5,django 运行时不认识程序或者网页中的中文字

         按网上所说尝试如下:

        1),在.py文件首行加上#coding=UTF-8

        2),在.py文件中加入

                 import sys
                 var1=sys.getdefaultencoding()

                reload(sys)

 

                sys.setdefaultencoding(‘utf8‘)

          都未能解决该问题。

         最后发现是程序文件本身格式不对,都是ASCAII text 类型的。

         检查文件格式命令:

           file file_name 或者 

 enca -L zh_CN file_name 

           只要把这类型的文件格式转换为utf-8 的就可以解决这个问题了。

         

          用pycarm 编辑器修改,如 在 文件中添加一行  s = ‘从从‘  中文,保存,即可转换过来,当然去掉其中的中文,又会回到ASCAII text 类型。

         

       

      6,如何关停apache 服务

           sudo apache2ctl stop

           sudo update-rc.d -f apache2 remove 参数-f是强制删除符号链接,即使/etc/init.d/apache2仍然存在。Note:这个命令仅仅禁止该服务,直到该服务被升级。

           如果你想在服务升级后仍然保持被禁用。应该执行如下的命令: update-rc.d apache2 stop 80 0 1 2 3 4 5 6.

   

     7, django不能创建数据库中的表的问题        

       报错:No migrations to apply

           

          第一步:

                删除该app名字下的migrations下的__init__.py等文件。

         第二步:

               进入数据库,找到django_migrations的表,删除该app名字的所有记录。

        第三步:执行下面这两条命令:(在项目目录下)

               python manage.py makemigrations

              python manage.py migrate

        原因:

       django_migrations表记录着数据库的对应表的修改记录。

       每次修改后,都执行第三步的命令,然后在第一步的文件夹下生成修改的文件,django_migrations表记录修改的变更过程。

 

   

          

     

参考资料:

https://code.ziqiangxuetang.com/django/django-url-name.html

http://www.runoob.com/django/django-tutorial.html

http://www.runoob.com/python/python-tutorial.html

 

以上是关于开始一个django工程的主要内容,如果未能解决你的问题,请参考以下文章

Django的安装和启动以及第一个工程的建立

Django基础

django开发实战笔记-1-2017-03-19

Django重新开始学习--环境搭建 笔记

django学习笔记001django版本的确定&创建一个django工程

Django:视图views