本文共 7001 字,大约阅读时间需要 23 分钟。
一、Django简介
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管 理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉 普赛爵士吉他手Django Reinhardt来命名的。
二、pip的应用
(1)什么是pip???
pip是一个安装和管理Python包的工具,是 easy_install 的一个替换品。
distribute是setuptools的取代(Setuptools包后期不再维护了),pip是easy_install的取代。
pip的安装需要setuptools 或者 distribute,如果你使用的是Python3.x那么就只能使用distribute因为Python3.x不支持setuptools。
(2)安装pip的两种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 方式1:通过yum的方式安装pip # rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # sed -i 's/^#//' /etc/yum.repos.d/epel.repo # sed -i 's/mirrorlist/#mirrorlist/' /etc/yum.repos.d/epel.repo # yum -y install python-pip 方式2:通过源码编译安装pip # wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz # tar xf setuptools-1.4.2.tar.gz # cd setuptools-1.4.2 # python setup.py install # easy_install --version # cd ../ # wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz # tar xf pip-1.4.1.tar.gz # cd pip-1.4.1 # python setup.py install |
(3)pip的基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 安装特定版本的package,通过使用==, >=, <=, >, <来指定一个版本号。 pip安装django,并指定安装的版本 # pip install 'django==1.6.5' pip卸载django # pip uninstall django pip查询包 # pip search 'django' pip升级包 # pip install -U 'django' 列出pip安装的包 # pip freeze |
三、安装Django
在linux环境下,安装Django有两种方式
(1)通过pip工具安装django
1 | # pip install 'django==1.6.5' |
(2)通过源码编译安装django
1 2 3 | # tar xf Django-1.6.10.tar.gz # cd Django-1.6.10 # python setup.py install |
(3)导入django模块并查看版本号,如果没有错误输出,说明django安装是成功的
1 2 | [root@localhost ~] # python -c 'import django;print (django.get_version())' 1.6.10 |
四、Django创建项目和应用
(1)创建一个项目
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~] # django-admin.py startproject webproject [root@localhost ~] # tree ./ ./ └── webproject #外层目录只是你项目的一个容器,可以任意重命名 ├── manage.py #一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互 └── webproject #目录是你项目中的实际 Python 包。该目录名就是 Python 包名,通过它你可以导入它里面的任何东西 ├── __init__.py #一个空文件,告诉 Python 该目录是一个 Python 包 ├── settings.py #该 Django 项目的设置/配置 ├── urls.py #该 Django 项目的 URL 声明; 一份由 Django 驱动的网站“目录” └── wsgi.py #一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目 2 directories, 5 files |
(2)创建应用程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@localhost ~] # cd webproject/ [root@localhost webproject] # django-admin.py startapp blog [root@localhost webproject] # tree . . ├── blog │ ├── admin.py │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── webproject ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py |
(3)修改django配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #需要修改三处位置 [root@localhost ~] # vim webproject/settings.py INSTALLED_APPS = ( 'django.contrib.admin' , 'django.contrib.auth' , 'django.contrib.contenttypes' , 'django.contrib.sessions' , 'django.contrib.messages' , 'django.contrib.staticfiles' , 'blog' , #第一处添加blog应用 ) LANGUAGE_CODE = 'zh-cn' #第二处修改为中文 TIME_ZONE = 'Asia/Shanghai' #第三处修改时区 |
(4)配置url访问路径
1 2 3 4 5 6 7 8 9 10 | [root@localhost ~] # vim webproject/urls.py urlpatterns = patterns( '' , # Examples: # url(r'^$', 'webproject.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r '^admin/' , include(admin.site.urls)), url(r '^blog$' , 'blog.views.index' ), #添加一行 #正则匹配,仅访问到^blog目录就重定向到blog.views中的index方法,所以在views.py里面应该定义好index函数/方法 ) |
(5)创建视图
1 2 3 4 5 6 7 8 | [root@localhost webproject] # vim blog/views.py from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(req): return HttpResponse( '<h1>hello django!!!</h>' ) |
(6)运行django服务
1 2 3 4 5 6 7 8 9 10 11 | [root@localhost webproject] # python manage.py runserver 0.0.0.0:80 Validating models... 0 errors found February 11, 2015 - 11:58:44 Django version 1.6.10, using settings 'webproject.settings' Starting development server at http: //0 .0.0.0:80/ Quit the server with CONTROL-C. [11 /Feb/2015 11:59:23] "GET / HTTP/1.1" 404 2003 [11 /Feb/2015 11:59:28] "GET /blo HTTP/1.1" 404 2012 [11 /Feb/2015 11:59:30] "GET /blog HTTP/1.1" 200 23 |
五、浏览器访问
六、模板层(template)
上述是通过调用blog.views中的index方法,返回一个页面!!!
1 2 3 | from django.http import HttpRespomse def index(req): return HttpRespose(<h1>hello django!!!< /h1 >) |
实际应用中这种方法显然不适合,那么接下来我们就聊聊HTML代码如何嵌套在Django中,有两种方式:
静态页面
方式一:
通过template加载模板,生成Context对象,存放模板所需数据,通过模板对象对数据进行渲染,然后通过HttpResponse输出。
模板文件放在应用程序下面templates目录,这个目录默认不存在需要手动创建
(1)首先查看当前所处的位置和整体项目的目录文件结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [root@localhost webproject] # pwd /root/webproject [root@localhost webproject] # tree . . ├── blog #应用 │?? ├── admin.py │?? ├── admin.pyc │?? ├── __init__.py │?? ├── __init__.pyc │?? ├── models.py │?? ├── models.pyc │?? ├── tests.py │?? ├── views.py │?? └── views.pyc ├── manage.py └── webproject #项目 ├── __init__.py ├── __init__.pyc ├── settings.py ├── settings.pyc ├── urls.py ├── urls.pyc ├── wsgi.py └── wsgi.pyc 2 directories, 18 files |
(2)创建我们的第二个应用www
1 2 3 | [root@localhost webproject] # django-admin.py startapp www [root@localhost webproject] # ls blog manage.py webproject www |
(3)更新项目配置文件,发布新应用并设置url
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [root@localhost webproject] # vim webproject/settings.py INSTALLED_APPS = ( 'django.contrib.admin' , 'django.contrib.auth' , 'django.contrib.contenttypes' , 'django.contrib.sessions' , 'django.contrib.messages' , 'django.contrib.staticfiles' , 'blog' , 'www' , #添加新行 ) [root@localhost webproject] # vim webproject/urls.py urlpatterns = patterns( '' , # Examples: # url(r'^$', 'webproject.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r '^admin/' , include(admin.site.urls)), url(r '^blog$' , 'blog.views.index' ), url(r '^www$' , 'www.views.index' ), #添加新行 ) |
(4)创建模板目录并生成html文件
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost webproject] # mkdir www/templates [root@localhost webproject] # cat www/templates/index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html xmlns= "http://www.allentuns.com/1999/xhtml" > < head > <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title>My Django Page< /title > < /head > <body> <h1>Hello Django!!!< /h1 > < /body > < /html > |
(5)修改应用的视图文件views
1 2 3 4 5 6 7 8 9 10 11 | [root@localhost webproject] # vim www/views.py from django.shortcuts import render from django.template import loader,Context #导入django的两个对象loader和Context from django.http import HttpResponse # Create your views here. def index(req): t = loader.get_template( 'index.html' ) #导入模板文件www/templates/index.html c = Context({}) #创建Context对象,用于存放提供给模板的数据(用于动态网页) return HttpResponse(t.render(c)) |
(6)浏览器访问
方式二:修改方式一(只需修改第五步,其它一样)
1 2 3 4 5 6 7 8 | [root@localhost webproject] # cat www/views.py from django.shortcuts import render from django.shortcuts import render_to_response # Create your views here. def index(req): return render_to_response( 'index.html' ,{}) |