Django笔记

Django —— 快速开发、DRY原则

Django官方文档Django文档

MVC框架

  • MVC 的产生理念:分工。让专门的人去做专门的事。
  • MVC核心思想:解耦
    • M:Model(模型), 和数据库进行交互
    • V:View(视图),产生HTML页面
    • C:Controller(控制器),接收请求,进行处理,与 M 和 V 进行交互,返回应答。
    • 通过浏览器注册用户信息

MVT(Django)

  • M:Model(模型);和 MVC 中 M 功能相同,和数据库进行交互。
  • V:View(视图);和 MVC 中的 C 功能相同,接收请求,进行处理,与 M 和 T 进行交互,返回应答。
  • T:Template(模板);和 MVC 中的 V 功能相同,产生 HTML 页面。
  • 在这里插入图片描述

项目创建

  • 创建一个项目:命令 —— django-admin startproject 项目名
  • 创建一个应用:命令 —— python manage.py startapp 应用名
  • 目录结构及文件说明:
    在这里插入图片描述
  • 建立应用和项目之间的联系,需要对 应用进行注册。
    • 修改settings.py 中的 INSTALLED_APPS配置项。
    • 在这里插入图片描述在这里插入图片描述
    • 使用 python manage.py runserver 将服务器运行起来。

ORM

  • ORM
    1. Object:对象——类
    2. Relations:关系数据库中的表
    3. Mapping:映射
  • 图示:
    在这里插入图片描述
  • Django中内嵌了 ORM 框架,ORM框架可以将 类和数据表进行对应起来,只需要通过类核对象就可以对数据表进行操作。
  • ORM另一个作用:根据设计的类生成数据库中的表。

1. 模型类

1)模型类设计:

# 图书类
# 图书类
class BookInfo(models.Model):
    '''图书模型类'''
    # 图书名称, CharField 说明是一个字符串, max_length 指定字符串最大长度
    btitle = models.CharField(max_length=20)
    # 出版日期,DateField说明是一个日期类型
    bpub_date = models.DateField()


# 多类
# 英雄人物类
# 英雄名 hname
# 性别 hgender
# 年龄 hage
# 备注 hcomment
# 关系属性: 建立图书类和英雄人物类之间的一对多关系
class HeroInfo(models.Model):
    '''英雄人物模型类'''
    # 英雄名称
    hname = models.CharField(max_length=20)
    # 性别    BooleanField 说明是 bool 类型,default指定默认值 False 表示男
    hgender = models.BooleanField(default=False)
    # 备注
    hcomment = models.CharField(max_length=200)
    # 图书类和英雄人物类之间的一对多关系
    hbook = models.ForeignKey('BookInfo', on_delete=models.DO_NOTHING)

注:需要继承 Django 中的 Model类 才是模型类。

  • 生成迁移文件:
    在这里插入图片描述
    在这里插入图片描述

2)配置数据库连接

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'HOST': '',
        'USER': 'root',
        'PASSWORD': 'root',
        'PORT': '3306'
    }
}

3)模型类生成表

在这里插入图片描述

  • 结果:
    在这里插入图片描述

4)通过模型类操作数据表

  • 使用 python manage.py shell 进入命令行
<1> 增

在这里插入图片描述
注意models.ForeignKey() 的赋值
在这里插入图片描述
数据库内容:
在这里插入图片描述

<2> 查
  1. 条件查询
    在这里插入图片描述
  2. 查找所有
    在这里插入图片描述
<3> 改

在这里插入图片描述

<4> 删

在这里插入图片描述

<5> 模型类命名规则

2. 后台管理

1) 本地化

  • 语言时区本地化。
  • 修改 settings.py 文件
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'  # 使用中文

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'  # 中国时间

2)创建管理员

  • 命令 python manage.py createsuperuser

3)注册模型类

  • 在应用的 admin.py 中注册模型类。告诉Django框架根据注册的模板类来生成对应表的管理页面。
from django.contrib import admin
from app_01.models import BookInfo, HeroInfo

# 后台管理相关文件
# Register your models here.
# 注册模型类
admin.site.register(BookInfo)
  • 管理员界面
    在这里插入图片描述
  • 可用通过重写 str 方法返回数据
class BookInfo(models.Model):
    '''图书模型类'''
    # 图书名称, CharField 说明是一个字符串, max_length 指定字符串最大长度
    btitle = models.CharField(max_length=20)
    # 出版日期,DateField说明是一个日期类型
    bpub_date = models.DateField()

    def __str__(self):
        # 返回书名
        return self.btitle
  • 网页展示结果
    在这里插入图片描述
    4)自定义模型管理类
from django.contrib import admin
from app_01.models import BookInfo, HeroInfo


# 后台管理相关文件
# Register your models here.
# 自定义模型管理类
class BookInfoAdmin(admin.ModelAdmin):
    '''图书模型管理类'''
    list_display = ['id', 'btitle', 'bpub_date']


# 注册模型类
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)
  • 网页展示结果
    在这里插入图片描述

3. 视图

在 Django 中,通过浏览器请求一个页面时,使用 视图函数 来处理这个请求,视图函数处理之后,要给浏览器返回页面内容。

1)视图函数的使用

  1. 定义视图函数
    视图函数定义在 views.py
    例:
    from django.shortcuts import render
    from django.http import HttpResponse
    
    
    # Create your views here.
    # 1 定义视图函数    HttpRequest 对象
    # 2 进行 url 配置,建立 url 地址和视图的对应关系
    def index(request):
        # 进行处理,和 M 和 T 进行交互 ...
        return HttpResponse('返回结果')
    
  2. 进行 url 配置
    应用 urls.py
    from django.urls import path, re_path
    from app_01 import views
    
    urlpatterns = [
        # 通过 url 函数 设置url路由配置项
        re_path(r'^index', views.index),  # 建立/index 和视图 index的关系
    ]
    
    项目 urls.py
    from django.contrib import admin
    from django.urls import path, include,re_path
    
    # 项目的 urls 文件
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path(r'^', include('app_01.urls')),  # 包含 app_01 应用里面的 urls.py 文件
    ]
    

2)url 匹配过程

在这里插入图片描述

4. 模板

模板不仅仅只是 HTML 文件

1)模板的使用

  1. 创建模板文件夹
  2. 配置模板目录
    配置 settings.py 文件里面的 TEMPLATES
    	 'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 设置模板文件的目录
    
  3. 使用模板文件
    • 加载模板文件
      去模板目录下面获取html文件的内容,得到一个模板对象。
    • 定义模板上下文
      向模板文件传递数据。
    • 模板渲染
      得到一个标准的html内容。

2)给模板文件传递数据

  • 模板变量使用 {{ 模板变量名 }}

  • 模板代码段:{% 代码段 %}

  • V:

    from django.shortcuts import render
    from django.http import HttpResponse
    from django.template import loader, RequestContext
    
    
    # Create your views here.
    # 1 定义视图函数    HttpRequest 对象
    # 2 进行 url 配置,建立 url 地址和视图的对应关系
    # 3 在应用的 urls 文件中进行 url 匹配的时:
    #       1 严格匹配开头和结尾
    def index(request):
        # 进行处理,和 M 和 T 进行交互 ...
        # return HttpResponse('返回结果')
    
        # 使用模板文件
        # 1 加载模板文件
        # temp = loader.get_template('tests/demo.html')
        # 2 定义模板上下文:给模板传递数据
        # context = RequestContext(request, {})
        # 模板渲染:产生一个标准的  html 内容
        # res_html = temp.render(context)
        # 返回给浏览器
        tmp = render(request, 'tests/demo.html', context={'content': 'hello world', 'list': list(range(1, 10))})
        return HttpResponse(tmp)
    
  • T:

    <ul>
    {% for i in list %}
        <li>{{ i }}</li>
    {% endfor %}
    </ul>
    
  • 结果:
    在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值