Django(二)Django的基本使用

ORM

  • O:Object对象类
  • R:Relations关系,关系数据库中的表
  • M:Mapping 映射

ORM基本原理

在这里插入图片描述
通过类和对象操作对应的数据表,不需要sql语句
ORM另一个作用:根据设计的类生成数据库中的表。

模型类和表的生成

在应用里models.py里设计和表对应的类,模型类
模型类的设计必须继承models.Model类
Models.ForeignKey可以建立俩个模型之间的一对多的关系,django在生成表的时候,就会在多的表中创建一列作为外键,建立俩个表之间一对多的关系

在设计完模型类后要生成表需要以下步骤:

  1. 生成迁移文件
    命令:python manage.py makemigrations
    在这里插入图片描述
    在这里插入图片描述

迁移文件是根据模型生成的,会自动生成id这个字段

  1. 执行迁移生成表
    命令:python manage.py migrate

根据迁移文件生成表。
表的默认格式时应用名_模型类名小写
在这里插入图片描述

  • 想要数据可视化需要安装一个sqliteman
    在这里插入图片描述
    如果出现一下问题
    在这里插入图片描述
    可以试试一下方法安装(在项目目录里执行安装命令,这样启动时直接输入sqliteman命令就可以运行了):
    在这里插入图片描述

通过模型类操作数据表

  • 进入项目shell的命令:

    python manage.py shell
    
  1. 首先导入模型类:

    from 项目名.models import 类名
    
  2. 向表中插入或是添加数据:

    在这里插入图片描述
    导入的date是用来格式化时间的

  3. 查询表中id为1的信息:
    在这里插入图片描述在这里插入图片描述

  4. 修改表中id为1的信息:
    在这里插入图片描述

  5. 删除id为1的信息:
    在这里插入图片描述

模型关系和关系查询

建立关系需要创建一个关系属性

  • 创建一个人物模型类来跟图书模型类建立关系

    class FiguresInfo(models.Model):
    
        """人物信息模型类"""
        # 人物名
        f_name = models.CharField(max_length=20)
        # 人物性别,默认是0即男,1即为女
        f_gender = models.BooleanField(default=0)
        # 人物性格特征
        f_character = models.CharField(max_length=128)
        # 关系属性 f_book,建立图书类和英雄人物类之间的一对多关系
        f_book = models.ForeignKey('BooksInfo')
    

注:# 关系属性 f_book,建立图书类和英雄人物类之间的一对多关系 f_book = models.ForeignKey('BooksInfo')这段代码用来建立关系,这会自动在表中生成一个外键字段是’关系名_id’
在这里插入图片描述

  • 查询图书表里面的所有内容:类名.objects.all()
    在这里插入图片描述
    返回的是一个对象列表

Django后台管理页面

设置流程

  1. 本地化
    语言和时间的本地化
    修改settings.py文件
    在这里插入图片描述

  2. 创建超级管理员
    命令:python manage.py createsuperuser

  3. 注册模型类

    在应用下的admin.py中注册模型,告诉django框架根据注册的模型类来生成对应表管理页面。

    在这里插入图片描述
    注:前三步执行后可以进入一个创建了的后台管理页面,在浏览器地址栏输入:http://127.0.0.1:8000/admin
    在这里插入图片描述
    输入设置的超级管理员账户即可登录
    进入到一下这个页面:
    在这里插入图片描述

  4. 自定义管理页面

    自定义模型管理类,模型管理类就是告诉django在生成的管理页面上显示那些内容

    from django.contrib import admin
    from app_1.models import BooksInfo,FiguresInfo
    # Register your models here.
    # 后台管理相关文件
    # 自定义模型管理类
    class BooksInfoAdmin(admin.ModelAdmin):
        """书籍模型管理类"""
        list_display = ['id', 'b_title', 'b_date']
    
    class FiguresInfoAdmin(admin.ModelAdmin):
        """人物模型管理类"""
        list_display = ['id', 'f_name', 'f_gender', 'f_character', 'f_book']
        
    # 注册模型类
    admin.site.register(BooksInfo, BooksInfoAdmin)
    admin.site.register(FiguresInfo, FiguresInfoAdmin)
    
  • 在书籍模型类里书写
        # 定义一个魔法属性来返回书名,在后台页面显示
        def __str__(self):
            # 返回书名
            return self.b_title
    
    • 在人物信息模型类里书写
        # 定义一个魔法属性来返回人物名,在后台页面显示
        def __str__(self):
            # 返回人物名
            return self.f_name
    
    这几段代码用来实现信息成中文列表展现
    在这里插入图片描述
    在这里插入图片描述

视图的使用

  1. 定义视图函数
    视图函数定义在views.py中。
    在这里插入图片描述
    视图函数必须有一个参数request,进行处理后,需要返回一个HttpResponse的类对象,'书籍界面’就是返回给浏览器的内容

  2. 进行url的配置

    url配置的目的是让让建立url和视图函数的对应关系,url配置定义在urpatterns的列表中,每一个配置项都调用url函数

    在这里插入图片描述
    在这里插入图片描述

    在项目的urls.py文件中包含具体应用的urls.py文件。应用urls.py文件中写url和视图函数的对应关系,这个urls.py文件需要自己创建在这个urls.py文件中要个匹配开头和结尾。

  3. 最后通过浏览器地址栏访问页面 在这里插入图片描述
    在这里插入图片描述

模板的使用

  1. 创建模板文件夹
    在这里插入图片描述

  2. 配置模板目录

    设置模板目录位置,用绝对位置加上模板目录名,这样不会因改变项目位置而导致模板无法使用

    在这里插入图片描述
    在这里插入图片描述

  3. 使用模板文件

    以下步骤是django render方法的原理

    a). 加载模板文件
    到模板目录下下面获取html文件的内容,得到一个模板对象。

    b). 定义模板上下文
    向模板文件传递数据。

    c). 模板渲染
    得到一个标准的html内容

    # django render方法的原理
    def my_render(request, template_path, context_dict):
        """使用模板文件"""
        # 1.加载模板文件,模板对象
        temp = loader.get_template('app_1/index.html')
        # 2.定义模板上下文:给模板文件传递数据
        context = RequestContext(request, context_dict)
        # 3.模板渲染:产生标准的html内容
        res_html = temp.render(context)
        # 4.返回给浏览器
        return HttpResponse(res_html)
    

    实际使用模板是调用django.db 的render方法

    def BooksInfo(request):
        # 返回给网页信息
        # return my_render(request, 'app_1/index.html', {'content': '书籍界面', 'list': range(10)})
        # return HttpResponse('书籍界面')
        return render(request, 'app_1/index.html', {'content': '书籍界面', 'list': range(10)})
    
  4. 给模板文件传递数据

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

    • 模板代码段:{%代码段%}
      在这里插入图片描述
      最终页面展示:
      在这里插入图片描述

MVT交互的综合案例

  1. 项目路由的配置

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),  # 项目配置
        url(r'^', include('app_1.urls')),  # 包含应用中的urls文件
    ]
    
  2. 模型类的创建

    from django.db import models
    # Create your models here.
    # 创建模型类
    class BooksInfo(models.Model):
        """书籍模型"""
        # 实例属性
        # 图书名称:CharFields 说明是一个字符串,max_length指定字符串的最大长度
        b_title = models.CharField(max_length=20)
        # 图书出版日期:DateField说明一个日期类型
        b_date = models.DateField()
        # 定义一个魔法属性来返回书名,在后台页面显示
        objects = models.Manager()
    
        def __str__(self):
            # 返回书名
            return self.b_title
            
    class FiguresInfo(models.Model):
    
        """人物信息模型类"""
        # 人物名
        f_name = models.CharField(max_length=20)
        # 人物性别,默认是0即男,1即为女
        f_gender = models.CharField(max_length=20, default='男')
        # 人物性格特征
        f_character = models.CharField(max_length=128)
        # 关系属性 f_book,建立图书类和英雄人物类之间的一对多关系
        f_book = models.ForeignKey('BooksInfo')
        objects = models.Manager()
    
        # 定义一个魔法属性来返回人物名,在后台页面显示
        def __str__(self):
            # 返回人物名
            return self.f_name
    
    
  3. 创建交互视图函数

    from django.shortcuts import render
    from django.http import HttpResponse
    from app_1.models import BooksInfo
    # Create your views here.
    # 1.定义视图函数,HttpRequest
    # 2.进行url配置,建立URL地址和视图的对应关系
    # http://127.0.0.1:8000/BookInfo
    def BookInfo(request):
        # 获取书籍对象
        books = BooksInfo.objects.all()
        # 返回给网页信息
        # return my_render(request, 'app_1/index1.html', {'content': '书籍界面', 'list': range(10)})
        # return HttpResponse('书籍界面')
        return render(request, 'app_1/index2.html', {'books': books})
    
    
    # http://127.0.0.1:8000/BookInfo/参数
    def show_figures(request, bid):
        # 获得关联的图书对象
        book = BooksInfo.objects.get(id=bid)
        # 获取与该图书对象关联的人物对象
        figures = book.figuresinfo_set.all()
        # return HttpResponse('人物界面')
        return render(request, 'app_1/show_figures.html',
                      {'figures': figures, 'book': book})
    
  4. 函数url路由配置

    from django.conf.urls import url
    from app_1 import views
    
    urlpatterns = [
        # 通过url函数设置url路由配置项
        url(r'^BookInfo$', views.BookInfo),  # 建立/index和视图index之间的关系
        url(r'^BookInfo/(\d+)$', views.show_figures),  # 查询与图书关联的人物信息
    ]
    
  5. 模板的设计

  • 书籍页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>图书信息</title>
    </head>
    <body>
        <h1>书籍信息如下:</h1>
    <!--    以下是for循环代码段-->
        <ul>
        {% for book in books %}<br>
            <li><a href="/BookInfo/{{ book.id }}">{{book.b_title}}</a> </li>
        {% endfor %}
        </ul>
    </body>
    
  • 人物页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>人物信息</title>
    </head>
    <body>
        <h1>{{book.b_title}}:</h1>
    <!--    以下是for循环代码段-->
        <ul>
        {% for figure in figures %}<br>
            <li>人物名:{{figure.f_name}}<br>
                  性别:{{figure.f_gender}}<br>
                  性格:{{figure.f_character}}</li>
    <!--        empty是在figures为空时要执行的代码段-->
        {%empty%}
            <li>没有人物信息</li>
        {% endfor %}
        </ul>
    </body>
    

最终页面展示
请添加图片描述
注:pycharm社区版在使用django框架时,模型类里直接调用objects方法会执行不了,可以通过在模板lei里添加objects = models.Manager()来解决这个问题

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值