Django安装使用

Django 简介

Django 是一个高质量的WEB框架,它提供一套程序框架,让我们更专注与WEB视图与模型开发,提高WEB开发效率,节省时间。
Django的的设计模式
Django的设计模式为MVC模式,M即Model,为网页的数据存取部分,由Django的数据库层调用指定的数据库,存取和修改数据,Django支持四种数据库引擎,PostgreSQL、MySQL、SQLite和Oracle。要调用数据库需要修改Django创建的工程的settings.py里的内容。V即View,控制着数据显示的内容及显示的方法,在Django中由视图函数和模板处理,视图函数是一个python函数,接收一个包含WEB网页请求信息的对象,并返回一个可以在WEB网页中显示的对象,视图函数处理和渲染模板。模板是个文档,通常用来产生HTML格式内容,模板控制着数据的显示形式,是WEB浏览者能直观感受到的部分。C为Control,即控制器,控制着WEB浏览者输入的URL和视图函数之间的映射,Django框架自行处理了这部分的大多数内容,需要由开发者做的只有提供映射表。开发者最需要关心的部分是模型、视图函数和模板。 Django遵循着松散耦合的原则,每一部分之间的关联性不强,修改一部分时不影响到其它的部分,这是一种设计原则,开发者在用Django开发web时也应当遵循这样的原则,这样开发出来的的网页代码清晰,可维护性高,每个开发者可以只专注与自己开发的模块,而不用关心其它部分的内容和结构,能够提高开发效率。
Django安装
Django由Python编写,因此安装Django需要Python环境,一般类Unix系统都装有Python,Django已经支持Python3,Django目前最新的版本为1.9.5,Django提供了长期支持版本1.8.12,支持到2018年4月以后,并不再更新和修复1.8版本以前的版本,因此,在使用Django时最好选用1.8及以后的版本,Django的一个长期支持版本为1.11版。 从官网可以下载到Django的各种版本,下载后。解压,进入目录运行命令

$ sudo python setup.py install 

即可安装成功。 在安装时,要确保没有安装其它版本的Django,如果安装了,请卸载。卸载方法: 如果你用pip安装,可以直接用pip卸载

$ pip uninstall Django

如果是使用源码安装,直接在python的库里找到Django的文件夹,并删除,可以由以下方法找到Django的文件夹

$ python -c "import django; print(django.__path__)"

Django的模型、模板和视图函数

一个简单的web网页

  • 首先创建一个Django项目
$ django-admin.py startproject mysite

在目录下会创建一个mysite的目录,目录的结构

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

manage.py是用来管理Django项目的带有参数的命令管理器,你可以输入

$ python manage.py help

来获得它的所有用法。
init.py用来告诉Python这是一个Python包。
settings.py用来设置Django项目的各项参数。
urls.py将相应的URL映射到相应的视图函数上。
wsgi.py是一个将Django项目挂载到WEB服务器上的工具的脚本。如何安装和使用可以参考WSGI的官网。
在项目中创建一个名为polls的app

$ python manage.py startapp polls

polls的目录结构

polls
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

project和app的区别: app是一个具体的网页应用,而工程包含许多个app,构成一个站点。 在mysite/settings.py修改,让Django知道app的存在

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',                     #添加项
)
  • 修改视图
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Hello,world. You're at the polls indes.")

在mysite文件夹下的url.py里如下配置

from django.conf.urls import include, url
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^polls/',include('polls.urls')),    #添加项
]

在配置mysite目录下的url时,include
里接受的参数是一个字符串,而不是一个模块。url的第一个参数为加入了正则表达式的字符串,正则表达式的具体语法参见RUNOOB.COM

  • 挂载网页
    运行
$ python manage.py runserver

打开网页输入*127.0.0.1:8000/polls,便可看到一个简单的网页。

当你在网页端输入地址时,Django会根据mysite目录下的settings.py里的配置找到URLconf,再根据其中的配置匹配对应的视图函数,然后调用视图函数,视图函数返回一个Httpresponse对象,Django将期转换为网页并显示在浏览器中

使用模型

在polls/models.py输入

from django.db import models

# Create your models here.
class Question(models.Model):
    question_text=models.CharField(max_length=200)
    pub_date=models.DateTimeField('date published')

    def __unicode__(self):
        return self.question_text

运行

$ python manage.py make migrations
$ python manage.py migrate

在数据库里创建该模型。 在polls/views.py里修改视图函数

from django.http import HttpResponse
from polls.models import Question
# Create your views here.
def index(request):
    lastest_question_list =Question.objects.order_by('-pub_date')[:5]
    output =','.join([p.question_text for p in lastest_question_list])
    return HttpResponse(output)

此时挂载网页再刷新,网页一片空白,证明我们已经能够正确调用模型了,空白是因为数据库里面并没有写入数据。管理数据库可以使用admin详情参见Django Documentation

使用模板

在poll目录下创建文件夹templates 在templates目录下创建文件index.html

html>
<head>
        <title>Hello,everyone</title>
</head>
<body>
        <p>It is now {{ current_date }}.</p>
</body>
</html>

修改视图函数

m django.shortcuts import render_to_response
import datetime
# Create your views here.
def index(request):
    now=datetime.datetime.now()
    return render_to_response('index.html',{'current_date':now})

刷新网页,便在网页上显示了当前的日期和时间。由于时区问题,显示的时间与本地时间不符,可以在settings.py中修改时区。

用Apache和WSGI部署Django

首先确保Apachemod_wsgi已经安装好。 然后在/etc/apache2/site-available新建文件mysite.conf,写入

ServerAdmin webmaster@localhost
DocumentRoot /home/feng/wyc/django/mysite

WSGIScriptAlias / /home/feng/wyc/django/mysite/mysite/wsgi.py
WSGIPythonPath /home/feng/wyc/django/mysite
<Directory /home/feng/wyc/django/mysite/mysite>
        <Files wsgi.py>
                Require all granted
        </Files>
</Directory>

运行命令

$ sudo a2ensite mysite.conf
$ sudo service apache2 reload

一般情况下,Django便已经部署好了,如果遇到无法正常打开网页的情况,可以参看apache的err.log,该文件在/var/log/apache2目录下。

Django小结

这里只介绍了Django最基本的一些功能,运用这些简单的功能便可以开发出一些简单的网页,Django基础知识不难,想要更详细的或者更深入一部了解Django,请参见官方教程或者Django Book 中文版。 谈一下学习Django的心得,在学习的过程中,要将参考文档的每个实例都自己敲一遍,这样可以发现在实际操作中遇到的问题,运行实例出现的问题在调试模式下网页上都由详细的错误提示,根据错误提示很容易找到问题的原因,自己解决问题,能够加深认识和印象。还有一个是在遇到问题的时候尽可能的去找官方文档或者官方说明,Django对应的每一个版本都有官方手册,基本上你所遇到的问题都可以在上面找到答案。在网上搜索到的答案一个是准确度不够,它可能是运行的版本和你的版本不一样或者其它方面有差别,另一个是网上的答案五花八门,可能你在网上找到答案的时间比你自己解决问题的时间还要长。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容