Django期末复习总结【内含思维导图帮助梳理】

news2024/11/26 18:54:38

Django-最下面有笔记的下载链接

初始Django框架

  • MTV设计模式

    • Model(模型)

    • Template(模板)

    • View(视图)

Django项目框架搭建

  • 创建项目骨架

    • django-admin startproject my_project1

  • 启动服务

    • python manage.py runserver

    • 默认端口:8000

  • 配置文件settings.py

    • INSTALLED_APPS(当前项目需要加载的App包-路径列表)

      INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'detection' ]

    • TEMPLATES(用于项目的模板配置)

      TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', 'django.template.context_processors.media', ], }, }, ]

    • DATABASES(数据库配置)

      DATABASES = { 'default':{ 'ENGINE' : 'django.db.backends.mysql', 'NAME' :'mask_data',#数据库名字 'USER' :'root', 'PASSWORD' :'123456', 'HOST' : 'localhost', #哪台机器安装了mysql 127.0.0.1 'PORT' : 3306, } }

  • 管理后台和超级用户

    • 创建超级用户命令

      • python manag.py createsuperuser

    • 默认访问路径

      • http://127.0.0.1:8000/admin/

  • 创建应用

    • 创建命令

      • python manage.py startapp app01

ORM应用与原理剖析

  • ORM基本概念

    • 数据库与PYTHON的对于关系

      • 数据表——Python类

      • 字段——类属性

      • 数据记录——类实例

      • 数据操作——类实例操作

    • 开发者不需要再写SQL代码,更关注完成业务逻辑,极大提高开发效率

  • Models定义

    • 直接继承或间接继承models.Model类

    • Model中定义字段(models.Field的子类)

    • 时间类型字段中,Field参数

      models.DateTimeField(auto_now_add=,auto_now=) auto_now_add表示首次创建对象的时间设置为当前时间, auto_now表示每次保存对象时间设置为当前时间

    • str方法用于 将函数的返回值作为对象的显示值

      • 函数返回值->对象显示值

  • 应用完成数据库迁移

    • 生成迁移文件命令

      • python manage.py makemigrations

    • 执行数据库迁移命令

      • python manage.py migrate

  • 三种关系字段类型

    • 多对一(ForeignKey)

    • 一对一(OneToOneField)

    • 多对多(MangToMangField)

  • 创建Model实例对象的方法

    • 使用save方法创建Model实例

      from .models.py import Demo demo = Demo() demo.save()

    • 使用create方法创建Model实例

      from projectName import models models.Demo.objects.create(A='f1',B='f2')

  • 返回单实例的查询方法

    • 使用get查询

    • get方法会抛出两类异常

      • DoesNoExist:给定的查询条件找不到对应的数据记录

      • MultipleObjectsReturned:给定的查询条件匹配了多条数据记录

  • 返回多条数据记录——使用获得QuerySet对象的查询

    queryset = MyModel.objects.filter(condition=value)

    • 使用filter()方法获取匹配特定条件的记录:

      queryset = MyModel.objects.filter(condition=value)

    • 使用exclude()方法排除符合特定条件的记录:

      queryset = MyModel.objects.exclude(condition=value)

    • 使用order_by()方法按特定字段对记录进行排序:

      queryset = MyModel.objects.order_by('field_name')

    • 使用distinct()方法返回去重后的记录:

      queryset = MyModel.objects.distinct()

  • 使用update方法更新单个或多个Model实例

    MyModel.objects.filter(condition=value).update(field_name=new_value)

  • 使用delete方法删除单个或多个Model实例

    MyModel.objects.filter(condition=value).delete()

    queryset = MyModel.objects.filter(condition=value) for instance in queryset:   instance.delete()

  • 综合应用:话题及评论的Model定义及新增、修改、删除操作

Django管理后台

  • 基本操作

    • ChangeList的页面布局

      from django.contrib import admin from django.contrib.admin.views.main import ChangeList

      class CustomChangeList(ChangeList):

      自定义页面布局

        list_display = ('field1', 'field2', 'field3')

      class MyModelAdmin(admin.ModelAdmin):   list_per_page = 20   list_display = ('field1', 'field2', 'field3')   list_filter = ('field1', 'field2')   search_fields = ('field1', 'field2')   ordering = ('field1',)   changelist_class = CustomChangeList

      admin.site.register(MyModel, MyModelAdmin)

    • 通过ChangeForm修改字段值

      from django.contrib import admin from django.forms import ModelForm

      class MyModelForm(ModelForm):

      自定义表单字段

      class MyModelAdmin(admin.ModelAdmin):   form = MyModelForm

      admin.site.register(MyModel, MyModelAdmin)

    • 通过管理后台添加实例对象

      from django.contrib import admin

      class MyModelAdmin(admin.ModelAdmin):   list_display = ('field1', 'field2', 'field3')

      admin.site.register(MyModel, MyModelAdmin)

    • 通过管理后台删除实例对象

      from django.contrib import admin

      class MyModelAdmin(admin.ModelAdmin):   list_display = ('field1', 'field2', 'field3')   actions = ['delete_selected']

      admin.site.register(MyModel, MyModelAdmin)

  • 注册Model到Admin的方式

    • 使用register方法注册,给register提供自定义的ModelAdmin子类

      from django.contrib import admin

      class MyModelAdmin(admin.ModelAdmin):   list_display = ('field1', 'field2', 'field3')

      admin.site.register(MyModel, MyModelAdmin)

    • 使用admin.register装饰器注册,在ModelAdmin类上使用装饰器标注需要注册的Model

      from django.contrib import admin

      @admin.register(MyModel) class MyModelAdmin(admin.ModelAdmin):   list_display = ('field1', 'field2', 'field3')

视图

  • 配置自定义路由的方法

    • 针对基于函数的视图

    • 针对基于类的视图

    • 针对项目中存在多App的场景:利用include实现APP与项目的解耦

  • 常用基于类的通用视图

    • 用于渲染模板的TemplateView

    • 用于展示Model列表的ListView

    • 用于展示Model详情的DetailView

Django模板系统

  • 模板后端的默认配置

    • 模板系统支持DTL和jinja2模板后端,当然也可以配置其他第三方的模板引擎

    • 直接能接触到模板后端的就是在settings.py文件中配置TEMPLATES列表

  • 模板语言的变量名使用中,变量名中的点会按照一定的顺序在上下文环境中查找变量

    • 1.字典查询:如data={'name':'John'} {{ data.name}} #输出John

    • 2.属性查询:如person = Person(name = "alice",age=30) {{peson.name}} #输出:Alice

    • 3方法调用。user=User(name='bob',is_activate=True) {{user.is_active}} #输出 True

    • 4数字索引:numbers = 【10,20,30】 {{ numbers.0}} #输出10

  • 过滤器

    • 用户在显示变量之前对变量的值进行调整,在模板中很常见,使用管道(|)指定。

      • 字符串过滤

        <!-- 假设上下文中有变量 name = "john doe" -->

        {{ name|capitalize }}

         

        {{ name|lower }}

         

        {{ name|upper }}

         ​
      • 列表过滤器

        <!-- 假设上下文中有变量 numbers = [10, 20, 30, 40, 50] -->

        {{ numbers|first }}

         

        {{ numbers|last }}

         

        {{ numbers|length }}

         ​
      • 数字过滤器

        <!-- 假设上下文中有变量 num1 = 10, num2 = 5 -->

        {{ num1|add:num2 }}

         

        {{ num1|subtract:num2 }}

         

        {{ num1|multiply:num2 }}

         

        {{ num1|divide:num2 }}

         ​
      • 时间日期过滤器

        <!-- 假设上下文中有变量 now = datetime.now() -->

        {{ now|date:"Y-m-d" }}

         

        {{ now|time:"H:i:s" }}

         

        {{ now|datetime:"Y-m-d H:i:s" }}

         ​
    • 模板继承

      • 如果多个模板中出现大量重复代码,那么可以考虑使用继承来减少重复性代码

        • 父模板

        • 子模板

          {% extends "base.html" %}

          {% block content %}

          ​  

          Welcome to My Website!

            

          This is the home page.

          {% endblock %}

Django表单系统

  • Form对象的特性

    • 实例对所有字段的验证

      from django import forms

      class ContactForm(forms.Form):   name = forms.CharField(label='Your Name', max_length=100)   email = forms.EmailField(label='Your Email', max_length=100)   message = forms.CharField(label='Your Message', widget=forms.Textarea)

      在视图中使用表单对象

      def contact(request):   if request.method == 'POST':     form = ContactForm(request.POST)     if form.is_valid():

      处理表单提交数据

            name = form.cleaned_data['name']       email = form.cleaned_data['email']       message = form.cleaned_data['message']

      ...

            return render(request, 'success.html')   else:     form = ContactForm()

        return render(request, 'contact.html', {'form': form})

    • 根据字段定义生成HTML

      from django import forms

      class ContactForm(forms.Form):   name = forms.CharField(label='Your Name', max_length=100)   email = forms.EmailField(label='Your Email', max_length=100)   message = forms.CharField(label='Your Message', widget=forms.Textarea)

      在视图中使用表单对象

      def contact(request):   form = ContactForm()   return render(request, 'contact.html', {'form': form}) HTML:

       {% csrf_token %}  {{ form.as_table }}  Submit

  • 基于Model定制的表单

    • 基于Model的定义自动生产表单,简化了Model翻译成表单的过程

      from django import forms from .models import Product

      class ProductForm(forms.ModelForm):   class Meta:     model = Product     fields = ['name', 'price', 'description']

      在视图中使用ModelForm

      def create_product(request):   if request.method == 'POST':     form = ProductForm(request.POST)     if form.is_valid():       form.save()       return redirect('product_list')   else:     form = ProductForm()   return render(request, 'create_product.html', {'form': form}) HTML:

       {% csrf_token %}  {{ form.as_p }}  Create

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2 线程基础知识复习

1、并发相关Java包 涉及到的包内容 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 2、并发始祖 3、start线程解读 初始程序 public static void main(String[] args) {Thread t1 new Thread(() ->{},"t1");t1.start();}//…

从功能测试到自动化测试,待遇翻倍,我整理的超全学习指南!

在这个吃技术的IT行业来说&#xff0c;我刚入行的时候每天做的也是最基础的工作&#xff0c;但是随着时间的消磨&#xff0c;我产生了对自我和岗位价值和意义的困惑。一是感觉自己在浪费时间&#xff0c;另一个就是做了快2年的测试&#xff0c;感觉每天过得浑浑噩噩&#xff0c…

一个JVM参数,服务超时率降了四分之三

先说结论&#xff1a;通过优化Xms&#xff0c;改为和Xmx一致&#xff0c;使系统的超时率降了四分之三 1. 背景 一个同事说他负责的服务在一次上线之后超时率增加了一倍 2. 分析 2.1 机器的监控 首先找了一台机器&#xff0c;看了监控 上线后最明显的变化就是CPU使用率变高了…

Redis6之主从复制

主从复制 是指将一台Redis服务器的数据&#xff0c;复制到其他Redis服务器。前者称为主节点&#xff0c;后者称为从节点&#xff1b;数据复制是单向的&#xff0c;只能由主节点复制到从节点&#xff1b;主节点以写为主&#xff0c;从节点以读为主。 特点 1.使用异步复制&#…

VS2019 QT5 第一个项目

(1条消息) VS2017PyQt5环境配置以及第一个HellowPyQt5_vs pyqt_2011老王的博客-CSDN博客 利用工具里的PyUIC5&#xff0c;将ui转为py 选中刚加入的ui文件&#xff0c;工具》PyUIC5 利用工具里的PyUIC5&#xff0c;将ui转为py 选中刚加入的ui文件&#xff0c;工具》PyUIC5 利用…

用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容

目录标题 前言主要内容开始我们的代码&#xff0c;先是导入模块为浏览器发送数据的函数创建一个执行函数网站服务启动程序运行代码尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 在公司网站开发中&#xff0c;我们往往借助于Flask、Django等网站开发框架去提高网站开…

libevent实践03:监听有名管道

首先创建两个管道&#xff1a;p1,p2 lkmaoubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ mkfifo p1 p2 lkmaoubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ ls -lshF p1 p2 0 prw-rw-r-- 1 lkmao lkmao 0 6月 29 20:39 p1| 0 prw-rw-r-- 1 l…

Blender导出gltf格式ThreeJS不显示问题-

1. 检查代码 import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; 。。。。。。initRoomGltf() {const _this this;// const loader new OBJLoader();const loader new GLTFLoader();// load a resourceloader.load(// resource URL// this.commonFunc.getPat…

【2023年江西省研究生数学建模竞赛】题目三 植物的多样性 建模方案及参考文献

代码与结果如下&#xff1a;完整文档见文末 相关思路请点击这里到原文章查看 2023年江西省研究生数模竞赛题目三&#xff1a;植物的多样性 植物作为食物链中的生产者&#xff0c;通过光合作用吸收二氧化碳&#xff0c;制造氧气&#xff0c;同时为其他生物提供食物和栖息地&a…

(一)创建线程的三种方式

&#xff08;一&#xff09;创建线程的三种方式 1.1 线程与进程1.2 创建线程的三种方式01、继承Thread类02、实现Runnable接口03、实现Callable接口 1.3 Question&#xff1f;01、为什么要重写 run() 方法&#xff1f;02、run() 方法和 start() 方法有什么区别&#xff1f;03、…

npm 包 - serve 使用

前端打包后&#xff0c;或者本地的html文件。有时需要将打包好的项目跑一下看看效果&#xff0c;这时就可以使用 serve 工具&#xff0c;在本地启动一个静态文件服务器。本文主要简单记录下 npm 包 serve 的基本使用命令。 一、全局安装 serve npm install serve -g二、运行 s…

php宝塔搭建部署活动现场大屏幕互动系统php源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。本期给大家带来一套活动现场大屏幕互动系统php源码。抽时间看了一下&#xff0c;功能还是不错的&#xff0c;有参考价值。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcneto…

【Java】Java核心 82:Git 教程(5)修改撤销

文章目录 08.GIT本地操作-修改撤消目标内容小结 09.GIT本地操作-总结 在Git中&#xff0c;可以使用不同的操作来修改和撤销提交。以下是几种常用的方法&#xff1a; 修改最后一次提交&#xff1a;如果你需要修改最后一次提交的提交信息或者漏掉了某些文件&#xff0c;可以使用…

Linux进程信号【信号保存】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、再次认识信号1.1、概念1.2、感性理解1.3、在内核中的表示1.4、sigset_t 信…

安装完MySQL后/var/log/mysqld.log中找不到初始密码

背景&#xff1a;我安装完MySQL后&#xff0c;密码忘记了&#xff0c;然后我又重新装了一次&#xff0c;结果发现重新安装后&#xff0c;/var/log/mysqld.log中找不到初始密码 找初始密码的命令 grep temporary password /var/log/mysqld.log问题原因&#xff1a;再删除MySQL…

matplotlib 更改离散colorbar分界线的宽度和外边框的宽度

1 设置colorbar颜色间隔线的宽度 通过属性dividers设置colorbar颜色间隔线的宽度 # 将drawedges设置为True&#xff0c;从而显示颜色之间的分界线 cbar fig.colorbar(im, axaxs, orientationhorizontal, ticksbins, drawedgesTrue) # 利用属性dividers设置宽度 cbar.divider…

小马识途:全媒体营销是未来营销之道

全媒体营销和整合营销都是广泛应用于市场营销领域的策略&#xff0c;但两者之间还是有一些区别和相似之处的。 全媒体营销和整合营销的相同之处&#xff0c;小马识途营销顾问认为两者都是多渠道整合的营销方式&#xff0c;都强调利用多个渠道和媒体来传播信息&#xff0c;以达到…

循环控制基础

循环控制 Key Point ●for 循环的使用 ●while 循环 ●do...while 循环 ●break 和continue 练习 1. &#xff08;for 循环&#xff09;计算123...100 的和 public class Test21 { public static void main(String[] args) { // &#xff08;for 循环&#xff09;计算…

我该如何抉择?测试工程师vs测试开发工程师vs开发工程师...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件开发工程师&a…

基于Python所写的读者书库设计

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87964232 《RCQ读者书库》程序使用说明 在PyCharm中运行《RCQ读者书库》即可进入如图1所示的系统主界面。 图1 系统主界面 具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;…