【Django】学习笔记

文章目录

    • @[toc]
      • MVC与MTV
        • MVC设计模式
        • MTV设计模式
      • Django下载
      • Django工程创建与运行
        • 创建工程
        • 运行工程
      • 子应用创建与注册安装
          • 创建子应用
          • 注册安装子应用
      • 数据模型
        • ORM框架
        • 模型迁移
      • Admin站点
        • 修改语言和时区
        • 设置管理员账号密码
        • 模型注册
        • 显示对象名称
        • 模型显示中文
        • App显示中文
      • 视图函数与路由系统
        • 定义视图函数
        • 配置路由系统
      • 模板渲染
        • 配置模板路径
        • 建立视图
        • 建立模板
      • 配置文件与静态文件
        • BASE_DIR
        • DEBUG
        • 静态文件
      • 数据库配置
        • 建立数据库book_manager
        • 配置settings.py
        • 安装MySQL驱动
        • 数据插入
      • 数据增加
        • save()方法
        • objects.create()方法
      • 数据修改
        • save()方法
        • objects.filter().update()方法
      • 数据删除
        • delete()方法
        • objects.filter().delete()方法
      • 数据库查询
        • 基础查询
          • objects.all()方法
          • objects.count()方法
          • objects.exclude()方法
          • objects.filter()方法
        • 过滤查询
          • exact
          • contains
          • endswith
          • isnull
          • in
          • gt
          • year
          • gte
        • F对象
        • Q对象
          • 逻辑与
            • objects.filter()方法
            • Q对象
          • 逻辑或
          • 逻辑非
        • 聚合函数
        • 排序函数
          • 正序
          • 倒序
        • 关联查询
          • 访问
            • 一对多的访问
            • 多对一的访问
          • 过滤查询
            • 多对一的查询
            • 一对多的查询
        • 切片
        • 分页
        • 惰性执行
        • 缓存
      • HttpRequest
        • 路由参数
          • 配置views.py
          • 配置urls.py
        • 查询字符串
          • 配置views.py
          • url
        • 表单数据
          • 配置views.py
          • 关闭CSRF
        • JSON数据
          • 配置views.py
        • 请求头数据
          • 配置views.py
        • 转换器
          • 配置converters.py
          • 配置views.py
          • 配置urls.py
      • HttpResponse
        • 配置views.py
      • JsonResponse
        • 配置views.py
      • Redirect
        • 配置views.py
      • Cookie
        • 设置Cookie
          • 配置views.py
        • 获取Cookie
          • 配置views.py
      • Session
        • 设置Session
          • 配置views.py
        • 获取Session
          • 配置views.py
        • 保存Session到Redis
          • 配置settings.py
      • 类视图
        • 类视图定义
          • 配置views.py
          • 配置urls.py
        • 多继承
          • 配置views.py
      • 中间件
        • 中间件定义
          • 配置middleware.py
          • 配置settings.py

MVC与MTV

MVC设计模式

1

MTV设计模式

2


Django下载

pip install django==2.2.5

Django工程创建与运行

创建工程
django-admin startproject book_manager
运行工程
python manage.py runserver

子应用创建与注册安装

创建子应用
python manage.py startapp book
注册安装子应用
  • 配置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',
]

数据模型

ORM框架
  • 配置models.py
from django.db import models


# Create your models here.

# 书籍信息表
class BookInfo(models.Model):
    name = models.CharField(max_length=10, verbose_name='书籍名称')
    pub_date = models.DateField(null=True, verbose_name='出版日期')
    read_count = models.IntegerField(default=0, verbose_name='阅读量')
    comment_count = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'book_info'
        verbose_name = '书籍信息管理'
        verbose_name_plural = verbose_name


# 人物信息表
class PersonInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )

    name = models.CharField(max_length=10, verbose_name='人物名称')
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='人物性别')
    description = models.CharField(max_length=100, null=True, verbose_name='人物描述')
    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='人物所属书籍')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'person_info'
        verbose_name = '人物信息管理'
        verbose_name_plural = verbose_name
模型迁移
  • Tools->Run manage.py Task
makemigrations
migrate

Admin站点

修改语言和时区
  • 配置settings.py
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'
设置管理员账号密码
  • Tools->Run manage.py Task
createsuperuser
模型注册
  • 配置admin.py
from django.contrib import admin

# Register your models here.

from .models import BookInfo, PersonInfo

admin.site.register(BookInfo)
admin.site.register(PersonInfo)
显示对象名称
from django.db import models


# Create your models here.

# 书籍信息表
class BookInfo(models.Model):
    name = models.CharField(max_length=10)

    def __str__(self):
        return self.name


# 人物信息表
class PersonInfo(models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField()
    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    def __str__(self):
        return self.name
模型显示中文
from django.db import models


# Create your models here.

# 书籍信息表
class BookInfo(models.Model):
    name = models.CharField(max_length=10)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '书籍信息管理'
        verbose_name_plural = verbose_name


# 人物信息表
class PersonInfo(models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField()
    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '人物信息管理'
        verbose_name_plural = verbose_name
App显示中文
  • 配置apps.py
from django.apps import AppConfig


class BookConfig(AppConfig):
    name = 'book'
    verbose_name = '书籍管理'

视图函数与路由系统

定义视图函数
  • 配置views.py
from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse


def index(request):
    return HttpResponse('OK!')
配置路由系统
  • 创建子路由:在book文件夹下建立urls.py文件
from django.urls import path
from . import views

urlpatterns = [
    path('index/', views.index),
]
  • 配置总路由
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('book.urls'))
]

模板渲染

配置模板路径
  • 在项目根路径下建立templates文件夹
  • 配置settings.py
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',
            ],
        },
    },
]
  • templates文件夹下建立book文件夹
建立视图
def index_2(request):
    context = {
        'name': '从心',
        'age': '22'
    }

    return render(request, template_name='book/index_2.html', context=c ontext)
建立模板
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>index_2</title>
</head>

<body>
    <div>
        书籍列表
        <ul>
            <li>西游记</li>
            <li>三国演义</li>
        </ul>
    </div>


    <div>
        个人信息
        <div>{{ name }}</div>
        <div>{{ age }}</div>
    </div>

</body>

</html>

配置文件与静态文件

BASE_DIR
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG
DEBUG = True
  • 默认工作在DEBUG模式下
  • 修改源代码程序会自动重启
  • Django程序出现异常时会向前端显示详细的错误追踪信息
DEBUG = False

ALLOWED_HOSTS = ['*']
  • ALLOWED_HOSTS为指定的IP访问白名单
静态文件
  • 在项目根目录下建立static文件夹
  • STATIC_URL是静态文件访问路由
  • STATICFILES_DIRS是静态文件存放路径
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
  • 通过http://127.0.0.1:8000/static/1.jpg访问静态文件

数据库配置

建立数据库book_manager
  • 字符集:utf8mb4
  • 排序规则:utf8mb4_bin
配置settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'localhost',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'root',
        'NAME': 'book_manager',
    }
}
安装MySQL驱动
  • 配置__init__.py
import pymysql

pymysql.install_as_MySQLdb()
  • 测试运行,修改最后一个链接
if query is not None:
	query = query.encode(errors='replace')
数据插入
insert into book_info (name, pub_date, read_count, comment_count, is_delete) values
('射雕英雄传', '1980-5-1', 12, 34, 0),
('天龙八部', '1986-7-24', 36, 40, 0),
('笑傲江湖', '1995-12-24', 20, 80, 0),
('雪山飞狐', '1987-11-11', 58, 24, 0);
insert into person_info (name, gender, description, book_id, is_delete) values
('郭靖', 0, '降龙十八掌', 1, 0),
('黄蓉', 1, '打狗棍法', 1, 0),
('黄药师', 0, '弹指神功', 1, 0),
('欧阳锋', 0, '蛤蟆功', 1, 0),
('梅超风', 1, '九阴白骨爪', 1, 0),
('乔峰', 0, '降龙十八掌', 2, 0),
('段誉', 0, '六脉神剑', 2, 0),
('虚竹', 0, '天山六阳掌', 2, 0),
('王语嫣', 1, '神仙姐姐', 2, 0),
('令狐冲', 0, '独孤九剑', 3, 0),
('任盈盈', 1, '弹琴', 3, 0),
('岳不群', 0, '华山剑法', 3, 0),
('东方不败', 1, '葵花宝典', 3, 0),
('胡斐', 0, '胡家刀法', 4, 0),
('苗若兰', 1, '黄衣', 4, 0),
('程灵素', 1, '医术', 4, 0),
('袁紫衣', 1, '六合拳', 4, 0);

数据增加

save()方法
from book.models import BookInfo
book_info = BookInfo(
    name='完美世界',
    pub_date='2013-8-16'
)
book_info.save()
objects.create()方法
from book.models import BookInfo
BookInfo.objects.create(
    name='斗破苍穹',
    pub_date='2014-5-4'
)

数据修改

save()方法
from book.models import BookInfo
book_info = BookInfo.objects.get(id=5)
book_info.name = '斗罗大陆'
book_info.save()
objects.filter().update()方法
from book.models import BookInfo
BookInfo.objects.filter(id=6).update(name='炼气十万年')

数据删除

delete()方法
from book.models import BookInfo
book_info = BookInfo.objects.get(id=6)
book_info.delete()
objects.filter().delete()方法
from book.models import BookInfo
BookInfo.objects.filter(id=5).delete()

数据库查询

基础查询
objects.all()方法
from book.models import BookInfo
BookInfo.objects.all()
objects.count()方法
from book.models import BookInfo
BookInfo.objects.all()
objects.exclude()方法
from book.models import BookInfo
BookInfo.objects.exclude(id=1)
objects.filter()方法
from book.models import BookInfo
BookInfo.objects.filter(id=1)[0]
过滤查询
exact
from book.models import BookInfo
BookInfo.objects.get(id__exact=1)
contains
from book.models import BookInfo
BookInfo.objects.filter(name__contains='湖')
endswith
from book.models import BookInfo
BookInfo.objects.filter(name__endswith='部')
isnull
from book.models import BookInfo
BookInfo.objects.filter(name__isnull=True)
in
from book.models import BookInfo
BookInfo.objects.filter(id__in=[1, 3, 5])
gt
from book.models import BookInfo
BookInfo.objects.filter(id__gt=3)
year
from book.models import BookInfo
BookInfo.objects.filter(pub_date__year=1980)
gte
from book.models import BookInfo
BookInfo.objects.filter(pub_date__gte='1990-1-1')
F对象
from book.models import BookInfo
from django.db.models import F
BookInfo.objects.filter(read_count__gt=F('comment_count') * 2)
Q对象
逻辑与
objects.filter()方法
from book.models import BookInfo
BookInfo.objects.filter(read_count__gt=20, id__lt=3)
# BookInfo.objects.filter(read_count__gt=20).filter(id__lt=3)
Q对象
from book.models import BookInfo
from django.db.models import Q
BookInfo.objects.filter(Q(read_count__gt=20) & Q(id__lt=3))
逻辑或
from book.models import BookInfo
from django.db.models import Q
BookInfo.objects.filter(Q(read_count__gt=20) | Q(id__lt=3))
逻辑非
from book.models import BookInfo
from django.db.models import Q
BookInfo.objects.filter(~Q(id=1))
聚合函数
from book.models import BookInfo
from django.db.models import Sum, Max, Min, Avg, Count
BookInfo.objects.aggregate(Sum('read_count'))
排序函数
正序
from book.models import BookInfo
BookInfo.objects.all().order_by('read_count')
倒序
from book.models import BookInfo
BookInfo.objects.all().order_by('-read_count')
关联查询
访问
一对多的访问
from book.models import BookInfo
book = BookInfo.objects.get(id=1)
book.personinfo_set.all()
多对一的访问
from book.models import PersonInfo
person = PersonInfo.objects.get(id=1)
person.book
# person.book_id
person.book.id
过滤查询
多对一的查询
from book.models import BookInfo
book = BookInfo.objects.filter(personinfo__name='郭靖')
book
book = BookInfo.objects.filter(personinfo__description__contains='八')
book
一对多的查询
from book.models import PersonInfo
people = PersonInfo.objects.filter(book__name='天龙八部')
people
people = PersonInfo.objects.filter(book__read_count__gt=20)
people
切片
from book.models import BookInfo
BookInfo.objects.all()[0:2]
分页
from book.models import BookInfo
from django.core.paginator import Paginator
books = BookInfo.objects.all()
paginator = Paginator(books, 2)
page_1_books = list(paginator.page(1))
page_1_books
paginator.num_pages
惰性执行
  • 如果用变量接收查询语句的返回结果,那么查询语句不会立即执行,而是等到调用该变量时执行
from book.models import BookInfo
books = BookInfo.objects.all()
books
缓存
  • 变量的值存放在系统内存中,如果通过变量进行查询,那么不会对数据库进行查询,而是从内存中查询
from book.models import BookInfo
books = BookInfo.objects.all()
[book.id for book in books]
[book.id for book in books]

HttpRequest

路由参数
配置views.py
def url_data(request, cat_id, sku_id):
    print(cat_id, sku_id)

    return HttpResponse('OK!')
配置urls.py
path('<cat_id>/<sku_id>/', views.url_data)
查询字符串
配置views.py
def query_str_data(request):
    print(request.GET)

    a = request.GET.get('a')
    b = request.GET.get('b')
    print(a, b)

    a_list = request.GET.getlist('a')
    print(a_list)

    return HttpResponse('OK!')
url
http://localhost:8000/query_str_data/?a=1&b=2&a=3
表单数据
配置views.py
def form_data(request):
    print(request.POST)

    username = request.POST.get('username')
    password = request.POST.get('password')

    print(username, password)

    return HttpResponse('OK!')
关闭CSRF
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
JSON数据
配置views.py
def json_data(request):
    json_data = request.body
    dict_data = json.loads(json_data)

    print(dict_data['username'], dict_data['age'])

    return HttpResponse('OK!')
请求头数据
配置views.py
def headers_data(request):
    print(request.META)
    print(request.META['CONTENT_TYPE'])
    print(request.method)
    print(request.path)
    print(request.user)

    return HttpResponse('OK!')
转换器
配置converters.py
from django.urls.converters import register_converter


class TelConverter:
    regex = '1[3-9]\d{9}'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return str(value)


register_converter(TelConverter, 'tel')
配置views.py
import converters


def tel_data(request, tel_data):
    print(tel_data)

    return HttpResponse('OK!')
配置urls.py
path('<tel:tel_data>/',views.tel_data)

HttpResponse

配置views.py
def http_response(request):
    response = HttpResponse(content='OK!', content_type='text/plain', status=200)
    response['key'] = 'value'

    return response

JsonResponse

配置views.py
def json_response(request):
    books_info = [
        {
            'id': 1,
            'name': '射雕英雄传',
            'pub_date': '1980-5-1'
        },
        {
            'id': 2,
            'name': '天龙八部',
            'pub_date': '1986-7-24'
        }
    ]

    return JsonResponse(data=books_info, safe=False)

Redirect

配置views.py
from django.shortcuts import redirect


def redirect_url(request):
    return redirect('https://www.baidu.com')

Cookie

设置Cookie
配置views.py
def set_cookie(request):
    username = request.GET.get('username')
    password = request.GET.get('password')

    print(username, password)

    response = HttpResponse('OK!')
    response.set_cookie('username', username)
    response.set_cookie('password', password)

    return response
获取Cookie
配置views.py
def get_cookie(request):
    print(request.COOKIES)

    username = request.COOKIES.get('username')
    password = request.COOKIES.get('password')

    return HttpResponse(f'username: {username}, password: {password}')

Session

设置Session
配置views.py
def set_session(request):
    username = request.GET.get('username')
    user_id = 1

    request.session['username'] = username
    request.session['user_id'] = user_id

    del request.session['user_id']
    # request.session.clear()
    # request.session.flush()

    request.session.set_expiry(60)

    return HttpResponse('OK!')
获取Session
配置views.py
def get_session(request):
    username = request.session.get('username')
    user_id = request.session.get('user_id')

    return HttpResponse(f'username: {username}, user_id: {user_id}')
保存Session到Redis
配置settings.py
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

类视图

类视图定义
配置views.py
from django.views import View


class LoginView(View):
    def get(self, request):
        return HttpResponse(f'当前请求为: {request.method}')

    def post(self, request):
        return HttpResponse(f'当前请求为: {request.method}')
配置urls.py
path('login/', views.LoginView.as_view())
多继承
配置views.py
from django.contrib.auth.mixins import LoginRequiredMixin


class OrderLoginView(LoginRequiredMixin, View):
    def get(self, request):
        return HttpResponse('个人中心页面')

    def post(self, request):
        return HttpResponse('个人中心页面')

中间件

中间件定义
配置middleware.py
from django.utils.deprecation import MiddlewareMixin


class TestMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print('每次请求前, 进行调用')

        username = request.COOKIES.get('username')
        if username is None:
            print('用户信息不存在')
        else:
            print('用户信息存在')

    def process_response(self, request, response):
        print('每次响应前, 进行调用')

        return response
配置settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'book.middlewares.TestMiddleware'
]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

英文面试中如何回答为什么离职?柯桥英语口语学校

面试中&#xff0c;面试官可能会问到如下问题&#xff1a; 1.Why are you looking for another job? 你为什么要换工作&#xff1f; 2.May I ask why you left the company? 可以问一下你为什么要离开那家公司吗&#xff1f; 3.What’s the reason for you to leave your …

基于通达信---做T专用算法

什么是做T? 股票做T是股票市场中常见的一种投资策略,也就是股票进行T+0操作,通过当天买进的股票,在当天卖出,是股市中常见的一种超短线的操作。其中T就是指交易日,利用交易日中的股票涨跌来赚取差价。股票做T常见的类型就是正T和倒T。 1、正T 股票做正t就是指先买后卖,…

历史融资额高达 2.44 亿美元的 Monad,是何方神圣?

以并行 EVM 为特点的 Monad&#xff0c;又一个具备竞争力的“以太坊杀手” 在今年 4 月初&#xff0c;Monad Labs&#xff08;Monad 的开发团队&#xff09; 获得了一笔由 Paradigm 领投的高达 2.25 亿美元的巨额融资&#xff0c;本轮融资的其他投资者还包括&#xff1a; Elec…

云服务器需要多少流量?评估支持最大并发量?

一 需要购买多大的流量&#xff1f; 项目上线时&#xff0c;我们需要购买多大的流量的带宽&#xff1f;支持多少设备&#xff08;支持多少并发量&#xff0c;在设计阶段会计算&#xff09;&#xff1f;作为架构师我们必须清楚与明确。 二 清楚服务器的流量计算 常见的云服务主机…

Android安卓写入WIFI热点自动连接NDEF标签

本示例使用的发卡器&#xff1a;Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/网址/海报-淘宝网 (taobao.com) package com.usbreadertest;import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.EditText; impo…

机器学习系统的设计

1.混淆矩阵 混淆矩阵作用就是看一看在测试集样本集中&#xff1a; 真实值是 正例 的样本中&#xff0c;被分类为 正例 的样本数量有多少&#xff0c;这部分样本叫做真正例&#xff08;TP&#xff0c;True Positive&#xff09;&#xff0c;预测为真&#xff0c;实际为真真实值…

刷题DAY57 | LeetCode 647-回文子串 516-最长回文子序列

647 回文子串&#xff08;medium&#xff09; 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c…

【结构型模式】适配器模式

一、适配器模式概述 适配器模式的定义-意图&#xff1a;将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。(对象结构模式->对象适配器/类结构模式->类适配器) 适配器模式包含三个角色&#xff1a;目标(Target)角色、适配者(Adapt…

【漏洞复现】云时空社会化商业ERP fileupload/gpy存在任意文件上传漏洞

漏洞描述 云时空社会化商业ERP fileupload/gpy存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行…

最邻近插值和线性插值

最邻近插值 在图像分割任务中&#xff1a;原图的缩放一般采用双线性插值&#xff0c;用于上采样或下采样&#xff1b;而标注图像的缩放有特定的规则&#xff0c;需使用最临近插值&#xff0c;不用于上采样或下采样。 自定义函数 这个是通过输入原始图像和一个缩放因子来对图像…

面试算法准备:树

这里写目录标题 1.树的基础1.1 首次理解1.2 深入理解1.2.1后序位置的特殊之处1.2.2 二叉树的思维指导 1.3 层序遍历1.4 二叉搜索树 BST 2.二叉树例题2.1 树的最大深度2.2 二叉树的直径2.3 二叉树的翻转2.4 填充每个节点的下一个右侧节点指针2.5 二叉树展开为链表 3 BST例题3.1 …

findImg找图工具

findImg 安装 npm install findImg -g 启动 findImg run 介绍 找出当前目录下的所有图片&#xff08;包括svg的symbol格式&#xff09;在浏览器中显示出来 源码 https://github.com/HuXin957/find-img 场景 例如前端项目中的img目录&#xff0c;大家都在往里面放图片&#xff…

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力&#xff0c;共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后&#xff0c;广州、珠海、北京多地政府纷纷同步出台了多项细化政策&#xff0c;广州最高支持额度高达50亿元&#xff0c;全链条为生物医药产业提供资金支持&#xff…

力扣:104. 二叉树的最大深度(Java,DFS,BFS)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a;1.深度优先搜索&#xff08;递归&#xff09;2.广度优先搜索&#xff08;队列&#xff09; 题目描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从…

排序 “壹” 之插入排序

目录 ​编辑 一、排序的概念 1、排序&#xff1a; 2、稳定性&#xff1a; 3、内部排序&#xff1a; 4、外部排序&#xff1a; 二、排序的运用 三、插入排序算法实现 3.1 基本思想 3.2 直接插入排序 3.2.1 排序过程&#xff1a; 3.2.2 代码示例&#xff1a; 3.2.3…

PMP每年考几次,费用如何?

今年的的考试分别分布在3月、6月、8月、11月&#xff0c;一般来说PMP的考试时间是3、6、9、12月&#xff0c;如果有特殊情况PMI也会及时进行调整&#xff0c;具体看他们官网的通知了。 PMP的考试费用全球是统一的&#xff0c;在国内考试报名费用是3900元&#xff0c;如果考试没…

JVM类加载基本流程及双亲委派模型

1.JVM内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机&#xff0c;这就需要从操作系统中申请一片内存区域。JVM申请到内存之后&#xff0c;会把这个内存划分为几个区域&#xff0c;每个区域都有各自的作用。 一般会把内存划分为四个区域&#xff1a;方法区(也称 "…

在PostgreSQL中,如何创建一个触发器并在特定事件发生时执行自定义操作?

文章目录 解决方案示例代码1. 创建自定义函数2. 创建触发器 解释 在PostgreSQL中&#xff0c;触发器&#xff08;trigger&#xff09;是一种数据库对象&#xff0c;它能在特定的事件&#xff08;如INSERT、UPDATE或DELETE&#xff09;发生时自动执行一系列的操作。这些操作可以…

基于SSM,JSP超市进销存管理系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分&#xff1a;用户管理员 用户&#xff1a; 登录&#xff0c;注销&#xff0c;查看基本信息&#xff0c;修改基本信息 进货管理&#xff1a; 进货信息&#xff1a;可以新增进货&#xff0c;查询进货&#xff0…

GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis

GRAF: Generative Radiance Fieldsfor 3D-Aware Image Synthesis&#xff08;基于产生辐射场的三维图像合成&#xff09; 思维导图&#xff1a;https://blog.csdn.net/weixin_53765004/article/details/137944206?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3…