一. 安装。
首先安装pip
linux下:
yum install python-pip
windows下:
二、下载源码安装。
https://www.djangoproject.com/download/
3.1 Linux 或 Mac 下
|
tar -xvzf django-1.7.6.tar.gz
cd django-1.7.6
(sudo) python setup.py install
|
3.2 Windows 下
直接用解压软件解压,然后到命令行(XP/Win7点击开始,在下面的那个输入框中输入 cmd, Win8在开始那里点右键,选择命令行)
比如在 D:\django-1.7.6\ 这个文件夹下
|
cd D:
cd django-1.7.6
python setup.py install
|
什么?提示 ‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。
Linux用自带源进行安装
1.1 ubuntu 下安装 Django
|
sudo apt-get install python-django -y
|
1.2 Fedora 下安装用 yum
|
yum install python-django
|
注意:自带源安装的 Django 一般版本比较旧,而用 pip 可以安装最新的版本。
2. 检查是否安装成功
终端上输入 python ,点击 Enter,进行 python 环境
|
>>> import django
>>> django.VERSION
(1, 7, 6, 'final', 0)
>>>
>>> django.get_version()
'1.7.6'
|
三、Django命令。
1. 新建项目(mywebsite):
django-admin.py startproject mywebsite
django-admin.py文件的目录 python安装目录下的 python27\Lib\site-packages\Django-1.9.2-py2.7.egg\django\bin
2. 新建app(learn)
manage.py startapp learn
manage.py文件的目录 python安装目录下的 python27\Lib\site-packages\Django-1.9.2-py2.7.egg\django\bin\mywebsite
3. 同步数据库
4. 使用开发服务器。
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
1
2
3
4
5
6
7
8
9
10
11
|
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(当然也可以kill掉占用端口的进程)
# 监听所有可用 ip (电脑可能有一个或多个内网ip,一个或多个外网ip,即有多个ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
|
|
python manage.py flush
|
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
|
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
|
1
2
|
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
|
关于数据操作 详见:数据导入数据迁移,现在了解有这个用法就可以了。
|
python manage.py shell
|
如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
|
python manage.py dbshell
|
Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
1
|
终端上输入 python manage.py 可以看到详细的列表,在忘记子名称的时候特别有用。
|
四、项目实例。(视图和网址的应用)
新建一个mywebsite实例,一个learn应用。
成功后的目录结构
└── wsgi.py
└── learn/
1. 把我们新定义的app加到settings.py中的INSTALL_APPS中
修改 mysite/mysite/settings.py
|
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learn',
)
|
备注,这一步是干什么呢? 新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件) , 后面你会学习到它们分别用来干什么.
我们在learn这个目录中,把views.py打开,修改其中的源代码,改成下面的
|
#coding:utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse(u"欢迎光临 自强学堂!")
|
第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明就报错.
第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。
3. 定义视图函数相关的URL(网址) (即规定 访问什么网址对应什么内容)我们打开 mysite/mysite/urls.py 这个文件, 修改其中的代码:
由于 Django 版本对 urls.py 进行了一些更改:
Django 1.7.x 及以下的同学可能看到的是这样的:
|
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'learn.views.index'), # new
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
)
|
Django 1.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用:
|
from django.conf.urls import url
from django.contrib import admin
from learn import views as learn_views # new
urlpatterns = [
url(r'^$', learn_views.index), # new
url(r'^admin/', admin.site.urls),
]
|
4. 在终端上运行 python manage.py runserver 我们会看到类似下面的信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
|
我们打开浏览器,访问 http://127.0.0.1:8000/
获取GET传递过来的数据:views.py修改:
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
a = request.GET['a']
b = request.GET['b']
c = int(a)+int(b)
return HttpResponse(str(c))
|
注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0
urls.py修改Django1.8以上
1
2
3
4
5
6
7
8
9
|
from django.conf.urls import url
from django.contrib import admin
from calc import views as learn_views
urlpatterns = [
url(r'^add/',
learn_views.add, name='add'), # 注意修改了这一行
url(r'^admin/', admin.site.urls),
]
|
我们打开开发服务器并访问
1
2
3
|
python manage.py runserver
如果提示 Error: That port is already in use.在后面加上端口号8001,8888等
python manage.py runserver 8001
|
打开网址:http://127.0.0.1:8000/add/ 就可以看到
如果 采用 /add/3/4/ 这样的网址的方式
Django 1.8.x 及以上:
|
url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
|
可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见Python 正则表达式),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。
我们再访问 http://127.0.0.1:8000/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了
五、项目实例。(模版)
. 打开 learn/views.py 写一个首页的视图
|
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
|
在 learn目录下新建一个 templates 文件夹,里面新建一个 home.html
默认配置下,Django 的模板系统会自动找到app下面的templates文件夹中的模板文件。
def home(request): name_list = ['张三', '李四', '王五', '赵六'] content = {'title': '名单'}
return render(request, 'home.html', {'name': name_list, 'content': content})模版传参数。
模版中变量访问
{{content.title}}
模版中方法的应用:
{{ % for n in name % }}
{{% endfor %}}
六、Django使用数据库。
settings.py配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Person',
'USER': 'root',
'PASSWORD': '123',
'HOST': '',
'PORT': '3306',
}
}
可能会报错,没有mysqldb驱动模块,https://pypi.python.org/pypi/MySQL-python/下载安装就行了。
django.db.utils.operationalerror:<2003, cant connect to mysql
上面配置里面的HOST字段修改成:127.0.0.1