一. 安装。
首先安装pip
linux下:
yum install python-pip
windows下:
二、下载源码安装。
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 |
5. 清空数据库
python manage.py flush |
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
6. 创建超级管理员
| python manage.py createsuperuser # 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填 # 修改 用户密码可以用: python manage.py changepassword username |
7. 导出数据 导入数据
1 2 | python manage.py dumpdata appname > appname.json python manage.py loaddata appname.json |
关于数据操作 详见:,现在了解有这个用法就可以了。
8. Django 项目环境终端
python manage.py shell |
如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
9. 数据库命令行
python manage.py dbshell |
Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
10. 更多命令
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/中的文件) , 后面你会学习到它们分别用来干什么.
2. 定义视图函数(访问页面时的内容)
我们在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. |
我们打开浏览器,访问
获取GET传递过来的数据:采用 /add/?a=4&b=5 这样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 |
打开网址: 就可以看到
如果 采用 /add/3/4/ 这样的网址的方式 views.py
Django 1.8.x 及以上:
| url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'), |
可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。
我们再访问 就可以看到和刚才同样的效果,但是这回网址更优雅了
五、项目实例。(模版)
. 打开 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