我来记笔记啦-Django开发流程与配置

目录
  • 1.Django介绍

    • 1.2 MVC模式说明
    • 1.3 Django的MVT
    • 1.4 Django配置顺序
  • 1. 创建Django项目
  • 2.创建Django子应用
  • 3. 注册安装子应用
  • 4. 使用Django进行数据库开发
    • 4.1. 定义模型类
    • 4.2. 模型迁移 (建表)
  • 5.站点管理
    • 5.1.管理界面本地化
    • 5.2 创建管理员
  • 6.视图和URL
    • 6.1. 定义视图函数
    • 6.2. 配置URLconf
  • 7.模板
    • 7.1 模板使用步骤
    • 7.2创建模板
    • 7.3设置模板查找路径
    • 7.4.模板接收视图传入的数据
    • 7.5.模板处理数据
    • 7.6. 查看模板处理数据成果
  • 8.数据库数据在网页展示
    • 8.1创建视图
    • 8.2.创建模板
    • 8.3.配置URLconf
  • 9.配置文件和静态文件
    • 9.1 setting配置文件
    • 9.2 静态文件
    • 9.3App应用配置

环境Ubuntu20.04Django1.11.1

1.Django介绍

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。

1.1 重量级框架

对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

  • 提供项目工程管理的自动化脚本工具
  • 数据库ORM支持(对象关系映射,英语:Object Relational Mapping)
  • 模板
  • 表单
  • Admin管理站点
  • 文件管理
  • 认证权限
  • session机制
  • 缓存

1.2 MVC模式说明

  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
  • V全拼为View,用于封装结果,生成页面展示的html内容。
  • C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

1.3 Django的MVT

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

1.4 Django配置顺序

bookmanager: 为工程目录;
book:  为应用目录;

bookmanager/settings.py -->> bookmanager/urls.py  -->>
book/urls.py -->> book/views.py -->> templates/book/index.html
            -->> book/models.py  -->> 数据库

1. 创建Django项目

django-admin startproject bookmanager

执行后,会多出一个新目录名为bookmanager,此即为新创建的工程目录。
  • 与项目同名的目录,此处为bookmanager。
  • settings.py是项目的整体配置文件。
  • urls.py是项目的URL配置文件。
  • wsgi.py是项目与WSGI兼容的Web服务器入口。
  • manage.py是项目管理文件,通过它管理项目。

运行服务器命令如下:

# vim ./bookmanager/settings.py 中设置ALLOWED_HOSTS = ['*']
# 设置后可远程访问 ip 0.0.0.0:8000

python manage.py runserver ip:端口
或:
python manage.py runserver

2.创建Django子应用

在django中,创建子应用模块目录仍然可以通过命令来操作,即:

python manage.py startapp 子应用名称

例如:cd ~/book
python manage.py startapp book

执行后,可以看到工程目录中多出了一个名为book的子目录
  • admin.py文件跟网站的后台管理站点配置相关。
  • apps.py文件用于配置当前子应用的相关信息。
  • migrations目录用于存放数据库迁移历史文件。
  • models.py文件用户保存数据库模型类。
  • tests.py文件用于开发测试用例,编写单元测试。
  • views.py文件用于编写Web应用视图。

3. 注册安装子应用

在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:

例如,将刚创建的book子应用添加到工程中,可在INSTALLED_APPS列表中添加'book.apps.BookConfig'

vim ./bookmanager/settings.py
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 添加自己的子应用
    'book.apps.BookConfig',
]

4. 使用Django进行数据库开发

4.1. 定义模型类

子应用目录models.py中定义模型类,继承自models.Model

from django.db import models

# Create your models here.
# 准备书籍列表信息的模型类
class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=10)

# 准备人物列表信息的模型类
class PeopleInfo(models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField()
    # 外键约束:人物属于哪本书
    book = models.ForeignKey(BookInfo)

4.2. 模型迁移 (建表)

  • 根据子应用目录models.py的内容生成创建表的语句和在数据库中创建表

  • 生成迁移文件:根据模型类生成创建表的语句

    python manage.py makemigrations
    
    子应用目录下makemigrations目录下会生成0001_initial.py
    
  • 执行迁移:根据第一步生成的语句在数据库中创建表

    python manage.py migrate
    
  • 提示:默认采用sqlite3数据库来存储数据

5.站点管理

5.1.管理界面本地化

Django工程目录下settings.py设置中文和时区:

# 设置中文
LANGUAGE_CODE = 'zh-Hans'

# 亚洲上海时区
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

5.2 创建管理员

创建管理员的命令 :

  python manage.py createsuperuser

 # 根据提示输入管理用户名和密码
  • 重置密码

  • python manager.py changepassword 用户名
    

启动服务: python manage.py runserver ip:端口

登陆站点 :http://127.0.0.1:8000/admin 管理数据库。

在子应用目录models.py中优化模型类展示:

# 准备书籍列表信息的模型类
class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=10)

    def __str__(self):
        """将模型类以字符串的方式输出"""
        return self.name   # 在网站管理列表中可以看到name属性

6.视图和URL

6.1. 定义视图函数

在子应用目录中的views.py里定义

  • 视图就是一个Python函数,被定义在应用views.py中.
  • 视图的第一个参数是HttpRequest类型的对象reqeust,包含了所有请求信息.
  • 视图必须返回HttpResponse对象,包含返回给请求者的响应信息.
  • 需要导入HttpResponse模块 :from django.http import HttpResponse
  • 定义视图函数 : 响应字符串OK!给客户端
# vim ./book/views.py

from django.shortcuts import render
# Create your views here.

from django.http import HttpResponse

def index(request):
    return HttpResponse('OK!!!')

6.2. 配置URLconf

查找视图的过程 :

  • 1.请求者在浏览器地址栏中输入URL, 请求到网站.
  • 2.网站获取URL信息.
  • 3.然后与编写好的URLconf逐条匹配.
  • 4.如果匹配成功则调用对应的视图.
  • 5.如果所有的URLconf都没有匹配成功.则返回404错误.

在工程目录中settings.py 设置URLconf入口:

# vim ./bookmanager/settings.py

ROOT_URLCONF = 'bookmanager.urls'
  • 需要两步完成URLconf配置

    • 1.在项目中定义URLconf
    • 2.在应用中定义URLconf
  • 项目中定义URLconf
# vim ./bookmanager/urls.py

from django.conf.urls import url,include # 导入
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 正则匹配规则:只要不是admin/ 就算匹配成功
    url(r'^', include('book.urls'))
]
  • 应用中定义URLconf
# 在子应用目录下新建urls.py
# vim ./book/urls.py

from django.conf.urls import url
from book.views import index

# urlpatterns为固定写法
urlpatterns = [
    url(r'^$',index)   # 路由引导视图函数
]

7.模板

7.1 模板使用步骤

  • 1.创建模板
  • 2.设置模板查找路径
  • 3.模板接收视图传入的数据
  • 4.模板处理数据

7.2创建模板

  • 应用同级目录下创建模板文件夹templates. 文件夹名称固定写法.
  • templates文件夹下, 创建应用同名文件夹. 例, Book
  • 应用同名文件夹下创建网页模板文件. 例 :index.html

7.3设置模板查找路径

在工程目录下, vim bookmanager/setings.py 设置DIRS

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

7.4.模板接收视图传入的数据

在子应用目录下编写:
vim book/views.py

# -*- coding:utf-8 -*-
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
def index(request):

    context = {'title':'测试模板数据'}
    return render(request, 'book/index.html', context)

7.5.模板处理数据

# 编写模板数据html、css、js等
vim templates/book/index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试模板数据</title>
    </head>
<body>

    <h1>根路径下的数据</h1>

    <di style="background: red; font-size: 30px"> {{title}} </di>
</body>

</html>

7.6. 查看模板处理数据成果

1.运行服务器: python manage.py runserver 0.0.0.0:8000

2.在服务器中输入: http://192.168.1.101:8000/ 访问

8.数据库数据在网页展示

实现步骤:

  • 1.创建视图
  • 2.创建模板
  • 3.配置URLconf

8.1创建视图

  • 查询数据库数据
  • 构造上下文
  • 传递上下文到模板
子应用目录下修改: vim book/views.py 

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from book.models import BookInfo,PeopleInfo
# BookInfo,PeopleInfo 模型类,在4.1定义迁移过

def index(request):
    context = {'title':'测试模板数据'}
    return render(request, 'book/index.html', context)

# 定义视图:提供书籍列表信息
def bookList(request):
    # 查询数据库书籍列表数据
    books = BookInfo.objects.all()
    # 构造上下文
    context = {'books':books}
    # 数据交给模板处理,处理完成后通过视图响应给客户端
    return render(request, 'book/booklist.html', context)

8.2.创建模板

  • 读取上下文数据
  • 构造网页html文档 : 书籍信息以列表样式展示
在模板目录下:
vim templates/book/booklist.html 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表信息</title>
    </head>
    <body>
        <ul>
            {% for book in books %}
            <li>{{ book.name }}</li>
            {% endfor %}
        </ul>

    </body>
</html>

8.3.配置URLconf

修改子应用目录中的urls.py文件

from django.conf.urls import url
from book.views import index,bookList

urlpatterns = [
    url(r'^$',index),
    # 匹配书籍列表信息的URL,调用对应的bookList视图
    url(r'^booklist/$',bookList)
]

cd $HOME/bookmanager

启动服务: python manage.py runserver 0.0.0.0:8000

在浏览器输入http://192.168.1.101:8000/booklist/

即可看到在数据库的数据。

9.配置文件和静态文件

9.1 setting配置文件

BASE_DIR 属性:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。

DEBUG属性:

调试模式,创建工程后初始值为True,即默认工作在调试模式下。

作用:

  • 修改代码文件,程序自动重启

  • Django程序出现异常时,向前端显示详细的错误追踪信息

  • 而非调试模式下,仅返回Server Error (500)

注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False和ALLOWED_HOSTS(访问ip)。

设置本地语言与时区

LANGUAGE_CODE = 'en-us'  # 语言
TIME_ZONE = 'UTC'  # 时区# 时区

将语言和时区修改为中国大陆信息

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

9.2 静态文件

项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中。

为了提供静态文件,需要配置两个参数:

  • STATICFILES_DIRS存放查找静态文件的目录
  • STATIC_URL访问静态文件的URL前缀

1) 在项目根目录下创建static目录来保存静态文件。

2) 在bookmanager/settings.py中修改静态文件的两个参数为

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

3)此时在static添加的任何静态文件都可以使用网址/static/文件在static中的路径来访问了。

例如,我们向static目录中添加一个index.html文件,在浏览器中就可以使用127.0.0.1:8000/static/index.html来访问。

9.3App应用配置

我们将此类添加到工程settings.py中的INSTALLED_APPS列表中,表明注册安装具备此配置属性的应用。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 添加自己的子应用
    'book.apps.BookConfig',
]

在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

from django.apps import AppConfig

class BookConfig(AppConfig):
    name = 'book'
  • AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。

  • AppConfig.verbose_name属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,如

    from django.apps import AppConfig
    
    class UsersConfig(AppConfig):
        name = 'book'
        verbose_name = '图书管理'
    
(0)

相关推荐