Django教程

一. 安装。

    首先安装pip

    linux下:

    yum install python-pip

    windows下:

    Django教程_第1张图片

二、下载源码安装。

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. 同步数据库


python manage.py syncdb
 
注意:Django 1.7.1及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
这种方法可以创建表,当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建

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应用。

成功后的目录结构


mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py

    └── wsgi.py

└── learn/


    ├── __init__.py
    ├── admin.py
    ├── models.py
    ├── tests.py
    └── views.py
settings.py是项目配置文件,urls.py是url配置文件。wsgi.py部署服务器时候用到的文件。

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.

我们打开浏览器,访问 http://127.0.0.1:8000/

获取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

打开网址:http://127.0.0.1:8000/add/ 就可以看到

如果 采用  /add/3/4/  这样的网址的方式
views.py

def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

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

你可能感兴趣的:(Django教程)