博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django入门示例之被解放的姜戈——01 初试天涯(安装及启动)
阅读量:5112 次
发布时间:2019-06-13

本文共 3512 字,大约阅读时间需要 11 分钟。

一直以来,学习的过程总是缓慢的。要想提高效率,则要采取目标驱动法,边做边学。近期在学习python。。

Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。虽然Django之于Python,达不到Rail之于Ruby的一统江湖的地位,但Django无疑也是Python在网络应用方面的一位主将。

Django意外的和昆汀的电影重名。这大大提高了Django的知名度。另外利用电影,宣传了这个奇怪的词的发音。

下面是姜戈的初体验。

1、安装Django
启动计算机中的Python,尝试载入Django模块。如果可以成功载入,那么说明Django已经安装好:

  1. import django
  2. print(django.VERSION)

如果Django还没有安装,可以在命令行,尝试使用pip安装:

  1. sudo pip install django

或者使用easy_install:

  1. sudo easy_install django

2、启动
使用下面的命令创建项目:

  1. django-admin.py startproject mysite

在当前目录下,将生成mysite文件夹。其文件树结构如下:

  1. mysite
  2. ├── manage.py
  3. └── mysite
  4.     ├── __init__.py
  5.     ├── settings.py
  6.     ├── urls.py
  7.     └── wsgi.py
  8. directory, 5 files

进入mysite,启动服务器:

  1. python manage.py runserver 8000

上面的8000为端口号。如果不说明,那么端口号默认为8000。

打开浏览器,访问,可以看到服务器已经在运行:

 

虽然有一个能跑的服务器,但什么内容都没有。

 

3、第一个网页

在http协议中可以看到,网络服务器是“请求-回应”的工作模式。客户向URL发送请求,服务器根据请求,开动后厨,并最终为客人上菜。Django采用的MVC结构,即点单、厨房、储藏室分离。

 

我们需要一个指挥员,将URL对应分配给某个对象处理,这需要在mysite/mysite下的urls.py设定。Python会根据该程序,将URL请求分给某个厨师。

 

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

将urls.py修改为:

 

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'mysite.views.first_page'),
)

我们添加了最后一行。它将根目录的URL分配给一个对象进行处理,这个对象是mysite.views.first_page。用以处理HTTP请求的这一对象还不存在,我们在mysite/mysite下创建views.py,并在其中定义first_page函数:

 

# -*- coding: utf-8 -*-
from django.http import HttpResponse
def first_page(request):
    return HttpResponse("<p>世界好</p>")

第一行说明字符编码为utf-8,为下面使用中文做准备。first_page函数的功能,是返回http回复,即这里的<p>世界好</p>。first_page有一个参数request,该参数包含有请求的具体信息,比如请求的类型等,这里并没有用到。

页面效果如下:

 

4、增加app

一个网站可能有多个功能。我们可以在Django下,以app为单位,模块化的管理,而不是将所有的东西都丢到一个文件夹中。在mysite下,运行manange.py,创建新的app:

 

  1. $python manage.py startapp west

这个新的app叫做west,用来处理西餐。 我们的根目录下,出现了一个新的叫做west的文件夹。

 

  1. mysite/
  2. ├── manage.py
  3. ├── mysite
  4. │   ├── __init__.py
  5. │   ├── __init__.pyc
  6. │   ├── settings.py
  7. │   ├── settings.pyc
  8. │   ├── urls.py
  9. │   ├── views.py
  10. │   └── wsgi.py
  11. └── west
  12.     ├── admin.py
  13.     ├── __init__.py
  14.     ├── models.py
  15.     ├── tests.py
  16.     └── views.py

我们还需要修改项目设置,说明我们要使用west。在mysite/setting.py中,在INSTALLED_APPS中,增加"west":

 

  1. INSTALLED_APPS = (
  2.     'django.contrib.admin',
  3.     'django.contrib.auth',
  4.     'django.contrib.contenttypes',
  5.     'django.contrib.sessions',
  6.     'django.contrib.messages',
  7.     'django.contrib.staticfiles',
  8.     'west',
  9. )

可以看到,除了新增加的west,Django已经默认加载了一些功能性的app,比如用户验证、会话管理、显示静态文件等。我们将在以后讲解它们的用途。

 

5、增加APP页面

我们下面为APP增加首页。我们之前是在mysite/urls.py中设置的URL访问对象。依然采用类似的方式设置。

另一方面,为了去耦合,实现模块化,我们应该在west/urls.py中设置URL访问对象。具体如下:

 

首先,修改mysite/urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'mysite.views.first_page'),
    url(r'^west/', include('west.urls')),
)

注意新增加的最后一行。这里,我们提醒指挥员,对于west/的访问,要参考west/urls.py。 随后,我们创建west/urls.py,添加内容:

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    url(r'^$', 'west.views.first_page'),
)

将URL对应west下,views.py中的first_page函数。 最后,在west下,修改views.py为:

  1. # -*- coding: utf-8 -*-
  2. from django.http import HttpResponse
  3. def first_page(request):
  4.     return HttpResponse("<p>西餐</p>")

访问,查看效果。 

 

 

6、总结

可以看到,Django的创建过程非常简单。但这只是初次尝试Django。为了创建一个完整功能的网站,还需要调用Django许多其它的功能。 

转载于:https://www.cnblogs.com/zoe15/p/4423672.html

你可能感兴趣的文章
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>