编辑
2024-07-07
👷后端架构
00
请注意,本文编写于 347 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

1. django的特点以及结构
2. 安装Django
3. 建立项目
4. 建立应用
5. 基本视图
6. 启动
7. 模型类
8. 表单视图
9. 使用管理界面

1. django的特点以及结构

特点:

  • 完善的文档
  • 集成数据访问组件
    的Model层自带数据库ORM组件,使开发者无须学习其他数据库访问技术
  • 强大的URL映射技术
    使用正则表达式管理URL映射
  • 后台管理系统自动生成: 开发者只需要通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台
  • 错误信息非常文章:在开发调试中,如果出现运行异常,则django可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置应用等,这样可以使开发者马上改正错误

组成结构:

  • 管理工具(Management):一套内置的创建站点、迁移数据、维护静态文件的命令工具
  • 模型(Model): 提供数据访问接口和模板,包括数据字段、元数据、数据关系等的定义及操作
  • 视图(View): Django的视图层封装了HTTP Request和Response的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等!
  • 模板(Template): 是一套Django自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式
  • 表单(Form): 通过内置的数据类型和空间生成HTML表单
  • 管理站(Admin): 通过声明需要管理的Model,快速生成后台数据库管理网站

2. 安装Django

python
pip instal django

3. 建立项目

在进行Django开发之前需要先用django-admin建立django的项目,语法如下:

python
django-admin startproject 站点名称 项目生成的路径(可以不加) # 例如 django-admin startproject djangosite

该命令在当前目录中建立了一个子目录djangosite,并在其中生成了django开发的默认文件,djangosite的目录如下:

djangosite/ manage.py djangosite/ __init__.py settings.py urls.py wsgi.py

对它们的解释如下:

  1. manage.py 是django用于管理本项目的命令行工具,之后进行站点运行、数据库自动生成、静态文件收集等都要通过该文件完成
  2. 内层 djangosite/目录 中包好了本项目的实际文件,同时因为其中包含了__init__.py的文件,所以该目录也是一个Python包
  3. djangosite/init.py 告诉python该目录是一个Python包
  4. djangosite/settings.py django的项目配置文件,默认时,在其中定义了本项目引用的Django组件、Django项目名等。在之后的开发中,还需在其中配置数据库参数、导入的其他python包的等信息。
  5. djangosite/urls.py 维护项目的URL路由映射等,即定义客户端访问的URL由哪一个Python模块解释并提供反馈,在默认的情况下,其中只定义了"/admin"即管理员站点的解释器。
  6. djangosite/wsgi.py 定义WSGI的接口信息,用于与其他Web服务器集成,一般本文件在生成后无须改动

4. 建立应用

为了在项目中开发符合MVC架构的实际应用程序,我们需要再项目中建立Django应用,每个Django项目可以包含多个Django应用。语法如下:

python
# python manage.py startapp 应用名称 python manage.py startapp app

命令完成后会在项目目录中建立如下目录及文件结构:

app/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py

对其中的文件功能解析如下:

  • init_.py 使app成为一个Python包
  • admin.py 管理站点模型的声明文件,默认为空
  • apps.py 应用信息定义文件。在其中生成了类AppConfig, 该类用于定义应用名等Meta数据
  • migrations包 用于爱之后定义引用迁移功能
  • models.py 添加模型层数据类的文件
  • tests.py 添加测试代码文件
  • views.py 定义URL响应函数

5. 基本视图

  1. 在djangosite/app/views.py 建立一个路由响应函数
python
from django.http import HttpResponse def welcome(request): return HttpResponse("<h1>Welcome to my tiny twitter!</h1>")
  1. 通过URL映射将用户的HTTP访问与该函数绑定起来。在djangosite/app目录中新建一个urls.py,管理应用app中的所有URL映射,其文件内容为:
python
from django.conf.urls import url # 引入app下的views.py的模块 from . import views urlpatterns=[ url(r'',views.welcome) ]

urlpatterns是一个变量列表,保存所有由url函数生成的路由映射

  1. 在项目URL文件djangosite/urls.py 中增加一项,声明对应用app中的urls.py文件的引用
python
from django.conf.urls import url from django.contrib import admin from django.conf.urls import include urlpatterns=[ url(r'^app/', include('app.urls')), url(r'^admin/', admin.site.urls) ]

解释:

首先通过import 语句引入django.conf.urls.include()函数,之后在urlpatterns列表中添加一个路径app/,将其转接到app.urls的包,即djangosite/app/urls.py文件。这样,通过include函数就将两个urlpatterns连接起来了

6. 启动

python
python manage.py runserver 0.0.0.0:8001

用这种方式启动的Web服务器是Django内置的Web服务器,由于性能原因,一般只用于开发人员测试。正式运行的网站应该使用WSGI的方式启动

7. 模型类

Model层的处理,即设计和开发信息发布的数据访问层,4个步骤:

  1. 配置项目INSTALLED_APPS 在项目的djangosite/settings.py的文件,找到INSTALLED_APPS数组,添加app的Config类:
python
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app.apps.AppConfig']
  1. 模型定义 打开djangosite/app/models.py 在其中新建一个模型类Moment用来定义信息发布表
python
from django.db import models class Moment(models.Model): content = models.CharField(max_length=200) user_name = models.CharField(max_length=20) kind = models.CharField(max_length=20)

content为保存消息的内容,user_name为保存发布人的名称、kind保存信息的类型

  1. 生成迁移文件

生成数据移植文件(makemigrations)是指将models.py中定义的数据表转换成数据库生成脚本的过程。

python
python manage.py makemigrations app

然后,会在migrations中看到一个.py的文件,若此时更改user_name的最大长度为30,修改完models.py之后,再次生成迁移文件,你就会看到一些明显的字段,说user_name的max_length进行修改了。迁移文件内的代码不用深究

  1. 移植到数据库 在模型的修改过程中可以随时调用makemigrations生成中间的移植文件。而当需要使移植文件生效、修改真实的数据库schema时,则需要通过manage.py的migrate命令来修改同步到数据库中
python
python manage.py migrate

可以在每次修改models.py文件内容运行makemigrations命令,检查改动是否符合数据库的语法规则;在调试运行之前,运行一次migrate命令使改动生效

8. 表单视图

设计和开发信息录入页面,该页面的基本功能为提供输入界面,让用户输入名字,文本消息内容、选择消息类型,用户提交后网页自动设置该信息的时间并保存到数据库中

  1. 定义表单类 建立表单类文件djangosite/app/forms.py 在其中定义表单类MomentForm,定义如下:
python
from django.forms import ModelForm from app.models import Moment class MomentForm(ModelForm): class Meta: model=moment fields='__all__' # 导入所有字段

解释:

  • 引入django.forms.ModelForm类,该类是所有DJango表单类的基类
  • 引入在本应用models.py 中定义的Moment类,以便在后面的表单类中管理Moment类。
  • 定义表单类MomentForm,在其中定义子类Meta。在Meta中声明与本表单管理的模型类机器字段
  • Fields字段可以设为__all__,也可以用列表形式声明所要导入的属性,比如
    =('content','user_name','kind')
  1. 修改模型类 为了使用户能够以单选的方式设置消息类型,则需要再models.py文件中定义单选枚举值,并与模型类Moment相关联。修改djangosite/app/models.py:
python
from __future__ import unicode_literals from django.db import models # 新增元组用户设置消息类型 枚举型 KIND_CHOICES=( ('python技术','python技术'), ('数据库技术','数据库技术'), ('经济学','经济学'), ('文体资讯','文体资讯'), ('个人心情','个人心情'), ) class Moment(models.Model): content = models.CharField(max_length=200) user_name = models.CharField(max_length=20,default='匿名') kind = models.CharField(max_length=20,choices=KIND_CHOICES,default=KIND_CHOICES[0])

其中kind_choices是一个元组,其中('经济学','经济学'),第一个是存储到数据库的,第二个是对应的关系,item.types.code,item.types.value,分别输出第一个,第二个的值

  1. 开发模板文件 建立目录djangosite/app/templates,在其中新建文件文件moments_input.html,文件的内容如下:
html
<!DOCTYPE html> <html> <head> <title>消息录入页面</title> </head> <body> <form action="?" method="post"> <fieldset> <legend>请输入并提交</legend> {{form.as_p}} <!-- 利用form.as_p来定义表单类的输入字段--> <input type="submit" value="submit"> </fieldset> </form> </body> </html>
  1. 开发视图 视图函数使得表单类和页面模板衔接起来。djangosite/app/views.py文件:
python
import os from app.forms import MomentForm from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.shortcuts import render def moment_input(request): if request.method=="POST": form = MomentForm(request.POST) if form.is_valid(): moment = form.save() moment.save() return HttpResponseRedirect(reverse("app.views.welcome")) else: form = MomentForm() PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) return render(request,os.path.join(PROJECT_ROOT,'app/templates','moments_input.html'),{'form':form})

在代码中新增视图函数moments_input(),该函数定义了两种访问方式的不同处理

在app/uls.py 文件中增加该文件视图函数的路由映射,内如容下:

python
urlpatterns=[ url(r'moments_input',views.moments_input), url(r'',views.welcome) ]

9. 使用管理界面

Django管理界面是一种通过简单的配置就可以实现的数据模型后台的Web控制台。管理界面通常是给系统管理员使用的,以完成元数据的输入、删除、查询等工作

首先,将管理界面需要管理的模型类推按家到djangosite/app/admin.py 文件中:

python
from django.contrib import admin from .models import Moment admin.site.register(Moment)

在第一次访问管理界面之前,需要通过manage.py工具的createsuperuser命令建立管理员用户

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!