开始一个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
(
sudo
) supervisord -c
/etc/supervisord
.conf
(
sudo
) supervisorctl -c
/etc/supervisord
.conf [start|stop|restart] [program-name|all]
[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
(
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'
,
)
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:
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