什么django
django是用python语言写的一个web框架。web框架的作用有以下几点:
- 减少重复的繁琐的工作,web开发中有很多重复的没有技术含量的工作,web工作可以将这些工作封装好,或者自动化实现
- 提供标准与规范,便于开发人员合作。如果不用web框架,每个开发人员的代码风格都不一致,增加很大的沟通成本
- 提供了更加安全健壮的底层架构,即使是初入门的程序员,只要按照框架的规范开发,也能快速完成一个不错的成品
以建房子为比喻,如果每个建筑工都以自己的想法去建,而且要负责所有的流程,包括打地基,建柱子,垒砖头等。这种造出来的房子肯定是又丑又不坚固。如果这个房子的地基已经打好了,基本的架构都弄好了,材料也都提供好了,建筑工只需要按照规范在这个基础上加砖头,即使是刚出道的小工,也能胜任。
总之,框架的作用就是让我们把事情做得又快又好。
本教程以django2.0为框架,搭建一个简易的投票系统,主要参考 django2.0的官方文档
通过此教程,将实现一个基本的投票应用
包括两个部分:
前台:用户可在前台看到所有候选者并进行投票
后台:管理员可在后台对候选者和投票选项进行增删改查
注册django2.0
注册django2.0, 要求python版本不低于3.4
$ pip install django
验证django版本有两种方式:
$ python
Python 3.6.2 (default, Dec 3 2017, 10:41:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.get_version())
2.0
$ python -m django --version
2.0
创建项目
$ django-admin startproject mysite
项目相当于django的一个实例,包含了所有配置文件以及所有应用
项目名称在命名时应避免使用python内置的关键字或者django的模块组件名。如,不能将项目命名为django,这将会与Django自身冲突,也不能将项目命名为test,会与python内置的test模块冲突
目录结构:
$ cd mysite
$ tree
.
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
文件名释义:
-
manage.py
实用的与django项目进行交互的命令行工具 -
mysite
项目中的实际python包 -
mysite/__init__.py
空文件,表示这是一个python包 -
mysite/settings.py
此项目的配置文件 -
mysite/urls.py
url声明文件 -
mysite/wsgi.py
wsgi服务器的配置文件
启动开发模式下的服务器
$ python manage.py runserver 0.0.0.0:8000
Performing system checks...
System check identified no issues (0 silenced).
You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 29, 2017 - 07:14:27
Django version 2.0, using settings 'mysite.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
启动服务后会提示你还没有进行数据迁移。这点先忽略,后面会讲到
浏览器访问:http://127.0.0.1:8000/
就能看到django的欢迎页
至此,我们已经启动了python的开发服务器,这是一个纯粹用python写的web服务器,仅用于开发模式下。当我们修改代码时,一般情况下这个开发服务器会自动重新加载。但有些行为可能触发不到开发服务器的自动加载,这时就需要我们手工重新启动
创建投票应用
项目与应用的区别:一个项目中可以包含多个应用,应用是指功能性的划分模块。如一个电商网站可以作为一个项目,其中的日志系统,购物车系统都可以分割成独立的应用
在manage.py的同级目录下执行:
$ python manage.py startapp polls
应用的目录结构:
polls
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
第一个视图文件
polls/views.py
#_*_coding:utf8_*_
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse("你好,欢迎来到投票系统的主页")
这是一个极简单的视图文件,为了让浏览器能访问到这个视图文件,我们需要配置url映射到这个文件
配置url
新增polls/urls.py文件
#_*_coding:utf8_*_
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
下一步是将polls/urls.py引入到mysite/urls.py文件中, 因为所有的url配置入口都是源于mysite/urls.py
mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
访问 http://127.0.0.1:8000/polls/
显示:
你好,欢迎来到投票系统的主页
include()函数允许django引入其他url配置文件,当浏览器访问 http://127.0.0.1:8000/polls/ 时,匹配到url规则path('polls/', include('polls.urls'))
, 然后读到polls/urls.py的配置:path('', views.index, name='index')
, 从而去执行polls/views.py的index方法