当前位置: 首页 > news >正文

全网最全Django面试题整理(一)

Django 中的 MTV 是什么意思?

在Django中,MTV指的是“Model-Template-View”,而不是常见的MVC(Model-View-Controller)架构。Django的设计理念是基于MTV的

  1. Model(模型)
    模型代表数据存取层,负责与数据库交互,定义数据的结构和业务规则。每个模型都是一个Python类,它们的属性定义了数据库表中的字段。
  2. Template(模板)
    模板是负责定义如何显示数据的部分,它包含了HTML和一些额外的标记(模板标签和过滤器),用于将视图中提供的数据渲染成最终的HTML。
  3. View(视图)
    视图处理用户请求,从模型中获取数据并将其传递给模板进行渲染。视图可以被认为是处理Web应用程序中逻辑的地方。在Django中,视图可以是函数或基于类的。

Django 中的 MTV 架构是如何工作的呢?

  1. 请求处理流程

当用户发起一个请求时,Django 的中间件(Middleware)首先处理这个请求,执行一系列的预处理操作。例如,中间件可能会处理安全性、会话管理等。

  1. URL 路由

请求到达 Django 项目后,Django 使用 URLconf(URL 配置)来确定使用哪个视图处理这个请求。URLconf 是 URL 到视图函数的映射。

  1. 视图处理

视图函数(或基于类的视图)被调用,负责处理业务逻辑。视图从模型中获取数据,可能进行一些处理,然后将数据传递给模板。

  1. 模板渲染

视图将数据传递给模板,模板负责将数据渲染成最终的HTML响应。模板中包含了HTML代码和Django模板语言的标签,这些标签可以访问视图中提供的数据,以及执行一些逻辑。

  1. 响应返回

渲染后的HTML响应被返回给用户的浏览器。如果在视图中有重定向或其他操作,相应的HTTP响应头会被设置。

  1. 中间件和其他处理

响应返回给用户之前,中间件再次参与,执行一系列的后处理操作。例如,中间件可以添加安全头、压缩响应等。

如何在 Django 中创建一个新的应用程序?

1: 创建应用程序

在你的 Django 项目的根目录下,运行以下命令:

bashCopy code
python manage.py startapp myapp

这将在项目目录下创建一个名为 myapp 的新应用程序。你可以根据需要将 myapp 替换为你想要的应用程序名称。

2: 配置应用程序

打开 settings.py 文件,将新创建的应用程序添加到 INSTALLED_APPS 配置中:

pythonCopy code
# settings.pyINSTALLED_APPS = [# ...'myapp',
]

3: 编写模型

myapp 目录下的 models.py 文件中定义应用程序的模型。模型是应用程序中用于表示数据的核心组件。

pythonCopy code
# myapp/models.pyfrom django.db import modelsclass MyModel(models.Model):name = models.CharField(max_length=100)description = models.TextField()def __str__(self):return self.name

4: 运行迁移

运行以下命令,创建并应用数据库迁移:

bashCopy code
python manage.py makemigrations
python manage.py migrate

5: 创建视图

myapp 目录下的 views.py 文件中创建应用程序的视图。

pythonCopy code
# myapp/views.pyfrom django.shortcuts import render
from django.http import HttpResponsedef index(request):return HttpResponse("Hello, this is the index view.")

6: 配置 URL

myapp 目录下创建一个名为 urls.py 的文件,并配置应用程序的 URL 模式。

pythonCopy code
# myapp/urls.pyfrom django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),
]

在项目的主 urls.py 文件中,包含应用程序的 URL 配置:

pythonCopy code
# project/urls.pyfrom django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('myapp/', include('myapp.urls')),
]

7: 运行开发服务器

现在,运行以下命令启动开发服务器:

bashCopy code
python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/myapp/,你应该能够看到应用程序的视图。
以上步骤涵盖了在 Django 中创建一个简单应用程序的基本流程。根据实际需求,你可以在应用程序中添加模板、静态文件、表单等其他组件。

如何捕获 URL 中的参数和路径变量?

在 Django 中,你可以使用正则表达式来捕获 URL 中的参数和路径变量。这是通过在 urls.py 文件中定义 URL 模式时实现的。以下是一些示例:
捕获路径变量:

from django.urls import path
from .views import MyViewurlpatterns = [path('articles/<int:article_id>/', MyView.as_view(), name='article_detail'),
]

在上面的例子中,<int:article_id> 捕获一个整数类型的路径变量,将其传递给视图函数。
捕获关键字参数:

from django.urls import path
from .views import MyViewurlpatterns = [path('books/<str:genre>/', MyView.as_view(), name='books_by_genre'),
]

在上面的例子中,<str:genre> 捕获一个字符串类型的关键字参数,将其传递给视图函数。
捕获多个路径变量和关键字参数:

from django.urls import path
from .views import MyViewurlpatterns = [path('articles/<int:year>/<int:month>/', MyView.as_view(), name='article_archive'),
]

在上面的例子中,<int:year><int:month> 捕获两个整数类型的路径变量,将它们传递给视图函数。
在类视图中处理捕获的参数:
在类视图中,你可以通过重写相应的方法来处理捕获的参数。例如,在 MyView 类中:

from django.views import View
from django.http import HttpResponseclass MyView(View):def get(self, request, *args, **kwargs):# 获取捕获的参数article_id = kwargs.get('article_id')genre = kwargs.get('genre')# 处理逻辑return HttpResponse(f"Article ID: {article_id}, Genre: {genre}")

在上面的例子中,get 方法中的 kwargs 包含了捕获的路径变量和关键字参数,你可以通过相应的键获取它们的值。
通过这种方式,你可以灵活地捕获和处理 URL 中的参数和路径变量,以满足你的业务需求。

什么是 Django 的 URL 映射?如何定义 URL 映射?

Django 的 URL 映射是指将用户请求的 URL 映射到相应的视图函数或处理类的过程。URL 映射是 Django Web 应用程序中定义 URL 结构的关键组件,它使得在 Django 中处理不同的页面或功能变得简单而灵活。

  1. 创建 Django 应用程序

首先,确保已经创建了 Django 应用程序。可以使用以下命令创建应用程序:

python manage.py startapp your_app_name
  1. 编辑应用程序的 **urls.py** 文件

在应用程序目录下创建一个名为 urls.py 的文件,该文件用于定义应用程序的 URL 映射。

  1. 定义 URL 映射规则

urls.py 文件中,导入 Django 的 pathre_path 函数,然后定义 URL 映射规则。例如:

from django.urls import path
from . import viewsurlpatterns = [path('home/', views.home, name='home'),path('about/', views.about, name='about'),
]

在上面的例子中,当用户访问 yourdomain.com/home/ 时,将调用 views.home 函数;访问 yourdomain.com/about/ 时,将调用 views.about 函数。

  1. 将应用程序的 URL 配置包含到主项目中

在主项目的 urls.py 文件中,使用 include 函数将应用程序的 URL 配置包含进来:

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('your_app/', include('your_app_name.urls')),
]

在这个例子中,当用户访问 yourdomain.com/your_app/ 时,Django 将使用应用程序中定义的 URL 映射规则来确定具体的视图。

  1. 命名 URL 映射(可选):

使用 name 参数为 URL 映射命名,这样可以在代码中使用 {% url 'name' %} 模板标签或 reverse 函数引用 URL。
通过以上步骤,成功定义了 Django 应用程序的 URL 映射,将用户的请求映射到相应的视图函数或处理类上。这种模块化的 URL 映射方式使得 Django 应用程序更易于维护和扩展。

请简述 Django 的路由系统是如何工作的。

Django 的路由系统主要通过 URLconf(URL 配置)来工作,其中 URLconf 是一个映射 URL 到视图函数或处理器的配置文件。以下是 Django 路由系统的工作流程:

  1. URL 配置文件(URLconf): Django 项目中的主 urls.py 文件充当 URLconf 的入口。在该文件中,你可以定义 URL 模式与对应的视图函数之间的映射。
# urls.pyfrom django.urls import path
from . import viewsurlpatterns = [path('home/', views.home, name='home'),path('articles/<int:article_id>/', views.article_detail, name='article_detail'),# ... 其他 URL 模式
]
  1. Include 其他 URLconf: 在主 urls.py 中,你可以使用 include 函数引入其他应用程序的 URLconf,以便将不同部分的 URL 映射分开管理。
# urls.pyfrom django.urls import include, pathurlpatterns = [path('app/', include('app.urls')),# ... 其他 URL 模式
]
  1. URL 模式匹配: 当用户在浏览器中请求一个 URL 时,Django 的路由系统将按照定义的 urlpatterns 从上至下逐一匹配 URL 模式。
  2. 正则表达式匹配: URL 模式可以包含正则表达式,以便匹配不同格式的 URL。例如,<int:article_id> 匹配一个整数类型的参数,并将其传递给视图函数。
  3. 调用匹配的视图函数: 一旦找到匹配的 URL 模式,Django 将调用与之对应的视图函数。视图函数接收请求对象,执行相应的业务逻辑,然后返回一个 HTTP 响应对象。
  4. 命名 URL: 在 URLconf 中可以使用 name 参数为每个 URL 模式命名。这样,视图函数可以通过该名称生成 URL,而不是直接硬编码 URL。

在视图函数或模板中,可以使用 reverse{% url %} 模板标签来动态生成命名 URL。

# views.pyfrom django.urls import reversedef my_view(request):url = reverse('home')# ...

什么是 Django 视图装饰器?可以举例几种常见的视图装饰器吗?

Django 视图装饰器是用于修改或扩展视图函数行为的装饰器,它们可以在视图函数被调用之前或之后执行一些操作。这些装饰器可以用于添加权限检查、缓存、登录验证等功能。

  1. @login_required
    确保用户在访问视图时已经登录。如果用户未登录,则将其重定向到登录页面。
from django.contrib.auth.decorators import login_required@login_required
def my_view(request):# 视图逻辑
  1. @permission_required
    要求用户具有特定权限才能访问视图。
from django.contrib.auth.decorators import permission_required@permission_required('myapp.can_view_data', raise_exception=True)
def my_view(request):# 视图逻辑
  1. @cache_page
    将视图的输出缓存一段时间,以提高性能。
from django.views.decorators.cache import cache_page@cache_page(60 * 15)  # 缓存 15 分钟
def my_view(request):# 视图逻辑
  1. @csrf_exempt
    允许视图绕过 CSRF 保护。不推荐在生产环境中使用,除非你确切知道自己在做什么。
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def my_view(request):# 视图逻辑
  1. @require_POST@require_GET
    要求视图只能处理 POST 或 GET 请求。
from django.views.decorators.http import require_POST, require_GET@require_POST
def my_post_view(request):# 处理 POST 请求的逻辑@require_GET
def my_get_view(request):# 处理 GET 请求的逻辑
  1. @require_http_methods
    要求视图只能处理指定的 HTTP 方法。
from django.views.decorators.http import require_http_methods@require_http_methods(["GET", "POST"])
def my_view(request):# 处理 GET 或 POST 请求的逻辑

什么是类视图(Class-Based Views)?可以提供一些常见的类视图示例吗?

类视图(Class-Based Views,CBVs)是 Django 中一种基于类的视图系统,它提供了一种更加面向对象的方法来编写视图。与函数视图相比,类视图使得组织和重用代码变得更加容易,并提供了更多的灵活性。
以下是一些常见的类视图示例:
1. 通用视图 - ListView:

from django.views.generic import ListView
from .models import MyModelclass MyModelListView(ListView):model = MyModeltemplate_name = 'myapp/my_model_list.html'context_object_name = 'my_model_list'

这个类视图使用 Django 的通用视图 ListView,它自动渲染一个对象列表。
2. 通用视图 - DetailView:

from django.views.generic import DetailView
from .models import MyModelclass MyModelDetailView(DetailView):model = MyModeltemplate_name = 'myapp/my_model_detail.html'context_object_name = 'my_model'

这个类视图使用 DetailView,用于渲染单个对象的详细信息。
3. 创建视图 - CreateView:

from django.views.generic.edit import CreateView
from .models import MyModel
from .forms import MyModelFormclass MyModelCreateView(CreateView):model = MyModelform_class = MyModelFormtemplate_name = 'myapp/my_model_form.html'success_url = '/success/'

这个类视图使用 CreateView,它用于处理创建对象的场景。
4. 更新视图 - UpdateView:

from django.views.generic.edit import UpdateView
from .models import MyModel
from .forms import MyModelFormclass MyModelUpdateView(UpdateView):model = MyModelform_class = MyModelFormtemplate_name = 'myapp/my_model_form.html'success_url = '/success/'

这个类视图使用 UpdateView,用于处理更新对象的场景。
5. 删除视图 - DeleteView:

from django.views.generic.edit import DeleteView
from .models import MyModel
from django.urls import reverse_lazyclass MyModelDeleteView(DeleteView):model = MyModeltemplate_name = 'myapp/my_model_confirm_delete.html'success_url = reverse_lazy('my_model_list')

这个类视图使用 DeleteView,用于处理删除对象的场景。

什么是 Django 视图函数?如何定义一个视图函数?

Django 视图函数是处理用户请求并返回 HTTP 响应的 Python 函数。视图函数负责接收用户的输入、执行业务逻辑,并返回适当的 HTTP 响应,通常是一个渲染后的 HTML 页面。

  1. 导入必要的模块

在你的 Django 应用程序中的 views.py 文件中,首先导入必要的模块。

from django.shortcuts import render
from django.http import HttpResponse
  1. 编写视图函数

编写一个 Python 函数,该函数将处理用户请求和业务逻辑,并返回一个 HttpResponse 对象或使用 render 函数渲染一个模板。

def my_view(request):# 业务逻辑data = "Hello, Django!"# 返回 HttpResponsereturn HttpResponse(data)# 或者使用 render 函数渲染模板# return render(request, 'my_template.html', {'data': data})
  1. 配置 URL 映射

在应用程序的 urls.py 文件中配置 URL 映射,将 URL 映射到刚才定义的视图函数。

from django.urls import path
from .views import my_viewurlpatterns = [path('my-url/', my_view, name='my_view'),
]
  1. 启动开发服务器

运行以下命令启动 Django 开发服务器。

python manage.py runserver
  1. 访问视图

打开浏览器,访问配置的 URL(例如,http://127.0.0.1:8000/my-url/),查看视图的响应。

在 Django 中,如何定义一个视图函数?这个视图函数需要返回什么?

在 Django 中,定义一个视图函数是处理 HTTP 请求并返回 HTTP 响应的关键步骤。以下是定义一个简单视图函数的基本步骤:

  1. 导入必要的模块: 在你的应用的 views.py 文件中,首先导入必要的模块,包括 HttpResponse、render 等。
from django.http import HttpResponse
from django.shortcuts import render
  1. 定义视图函数: 创建一个函数,函数的参数通常包括一个 request 对象,该对象包含了当前的 HTTP 请求信息。在函数体内执行相应的逻辑。
def my_view(request):# 视图逻辑return HttpResponse("Hello, Django!")

或者,使用 render 函数返回一个渲染后的模板:

def my_view(request):# 视图逻辑return render(request, 'my_template.html', {'variable': 'value'})
  1. HTTP 响应: 视图函数通常需要返回一个 HTTP 响应对象。这可以是简单的文本响应、HTML 内容,也可以是渲染后的模板。

返回简单的文本响应:

from django.http import HttpResponsedef my_view(request):return HttpResponse("Hello, Django!")

返回渲染后的模板:

from django.shortcuts import renderdef my_view(request):return render(request, 'my_template.html', {'variable': 'value'})
  1. URL 映射: 在你的应用的 urls.py 文件中,将视图函数与特定的 URL 路径进行映射。
from django.urls import path
from .views import my_viewurlpatterns = [path('my-url/', my_view, name='my_view'),
]

如何从视图函数中渲染模板?

在 Django 中,你可以使用 render 函数从视图函数中渲染模板。render 函数简化了渲染过程,它接受请求对象、模板名称以及一个包含上下文数据的字典作为参数,并返回一个包含渲染内容的 HttpResponse 对象。

  1. 导入必要的模块
from django.shortcuts import render
from django.http import HttpResponse
  1. 定义视图函数
def my_view(request):# 业务逻辑data = "Hello, Django!"# 使用 render 函数渲染模板,并传递上下文数据return render(request, 'my_template.html', {'data': data})
  1. 创建模板

在你的应用程序的 templates 目录下创建一个名为 my_template.html 的模板文件,用于渲染内容。

<!DOCTYPE html>
<html>
<head><title>My Template</title>
</head>
<body><h1>{{ data }}</h1>
</body>
</html>
  1. 配置 URL 映射

在应用程序的 urls.py 文件中配置 URL 映射,将 URL 映射到刚才定义的视图函数。

from django.urls import path
from .views import my_viewurlpatterns = [path('my-url/', my_view, name='my_view'),
]
  1. 启动开发服务器

运行以下命令启动 Django 开发服务器。

python manage.py runserver
  1. 访问视图

打开浏览器,访问配置的 URL(例如,http://127.0.0.1:8000/my-url/),查看视图的响应。
上述例子中,render 函数用于将 my_template.html 模板渲染,并将 data 数据传递给模板。模板中的 {{ data }} 将显示视图函数中传递的数据。这是一个简单的示例,实际应用中,模板通常包含更多的动态内容和模板标签。

什么是 Django 模板?如何使用模板标签和过滤器?

Django 模板是一种基于标记语言的轻量级模板系统,用于将动态数据嵌入到 HTML 页面中。模板系统允许开发者通过使用模板标签和过滤器动态地生成页面内容,从而实现前后端的分离和更好的代码组织。
模板标签:

  1. 变量插值

使用 {{ variable }} 语法插入变量的值。

<p>{{ username }}</p>
  1. for 循环

使用 {% for item in items %}{% endfor %} 来遍历列表或查询集。

<ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}
</ul>
  1. if 语句

使用 {% if condition %}{% endif %} 来进行条件判断。

{% if user.is_authenticated %}<p>Welcome, {{ user.username }}!</p>
{% else %}<p>Please log in.</p>
{% endif %}
  1. include 包含

使用 {% include 'partial_template.html' %} 将其他模板包含到当前模板中。

{% include 'header.html' %}

模板过滤器:

  1. safe 过滤器

使用 |safe 来标记输出的内容为安全的,不进行 HTML 转义。

{{ content|safe }}
  1. date 过滤器

使用 |date 来格式化日期。

{{ article.pub_date|date:'F j, Y' }}
  1. length 过滤器

使用 |length 获取列表或字符串的长度。

{{ items|length }}
  1. default 过滤器

使用 |default 设置变量的默认值。

{{ variable|default:"No value" }}
  1. slice 过滤器

使用 |slice 对列表或字符串进行切片。

{{ text|slice:":50" }}

什么是 Django 模板标签库?可以提供一些自定义模板标签的示例吗?

Django 模板标签库(Template Tag Library)是一组在模板中使用的标签和过滤器,它们可以执行一些特定的逻辑或操作,使得在模板中的展示更加灵活。Django 提供了许多内置的模板标签和过滤器,同时你也可以创建自定义的模板标签库以满足特定的需求。

  1. 创建一个 Django 应用:
python manage.py startapp myapp
  1. 在应用目录中创建 **templatetags** 目录:
myapp/
├── __init__.py
├── templatetags/
│   ├── __init__.py
│   └── custom_tags.py
  1. **custom_tags.py** 中定义自定义标签:
# myapp/templatetags/custom_tags.pyfrom django import templateregister = template.Library()@register.simple_tag
def hello_world():return "Hello, World!"

在模板中,首先需要加载你的自定义标签库:

{% load custom_tags %}

然后就可以使用自定义标签了:

{% hello_world %}

这是一个简单的例子,以下是一个更复杂的示例:

# myapp/templatetags/custom_tags.pyfrom django import template
from myapp.models import MyModelregister = template.Library()@register.inclusion_tag('myapp/my_model_list.html')
def show_my_model_list():my_model_list = MyModel.objects.all()return {'my_model_list': my_model_list}
<!-- myapp/my_model_list.html --><ul>{% for my_model in my_model_list %}<li>{{ my_model.name }}</li>{% endfor %}
</ul>
<!-- template.html -->{% load custom_tags %}{% show_my_model_list %}

这个例子中,show_my_model_list 标签通过 inclusion_tag 返回一个包含 MyModel 列表的模板片段。在模板中使用这个标签可以方便地展示 MyModel 列表。通过自定义模板标签库,你可以在模板中添加更复杂的逻辑和重用可视化组件,使得模板更具可维护性和可重用性。

如何使用 Django 模板继承和包含(template inclusion)?

Django 模板继承和包含是两种在模板中组织和重用代码的强大机制。
模板继承(Template Inheritance):
模板继承允许你定义一个基础模板,并在其他模板中扩展或重写特定块,从而避免在每个页面中重复相同的 HTML 结构。以下是一个简单的例子:
基础模板 (**base.html**):

<!-- base.html --><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}Default Title{% endblock %}</title>
</head>
<body><header><h1>{% block header %}My Website{% endblock %}</h1></header><main>{% block content %}{% endblock %}</main><footer>&copy; 2023 My Website</footer>
</body>
</html>

子模板 (**child.html**):

<!-- child.html -->{% extends 'base.html' %}{% block title %}Page Title{% endblock %}{% block header %}Welcome to My Page{% endblock %}{% block content %}<p>This is the content of my page.</p>
{% endblock %}

在上述例子中,child.html 继承了 base.html,并覆盖了基础模板中的标题、页眉和内容块。
模板包含(Template Inclusion):
模板包含允许你在一个模板中包含另一个模板的内容,使得你可以在多个地方重用相同的代码片段。以下是一个简单的例子:
包含的模板 (**include_me.html**):

<!-- include_me.html --><p>This is included content.</p>

主模板 (**main_template.html**):

<!-- main_template.html --><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Main Template</title>
</head>
<body><header><h1>Welcome to My Website</h1></header><main>{% include 'include_me.html' %}</main><footer>&copy; 2023 My Website</footer>
</body>
</html>

在上述例子中,main_template.html 主模板包含了 include_me.html 的内容。通过使用模板继承和包含,你可以更有效地组织和重用你的模板代码,提高代码的可维护性。

什么是 Django 表单?如何创建和处理表单?

Django 表单是一种用于处理 HTML 表单的强大工具,它允许开发者轻松创建表单、验证用户输入以及处理表单提交的数据。Django 表单通常用于用户交互,例如用户注册、登录、搜索等功能。
创建表单类:

  1. 导入必要的模块

在你的 Django 应用程序中的 forms.py 文件中,首先导入必要的模块。

from django import forms
  1. 定义表单类

创建一个继承自 forms.Form 的类,并在类中定义表单的字段。

class MyForm(forms.Form):username = forms.CharField(label='Username', max_length=100)email = forms.EmailField(label='Email')password = forms.CharField(label='Password', widget=forms.PasswordInput)

在视图中处理表单:

  1. 导入表单类

在处理表单的视图中导入刚才定义的表单类。

from .forms import MyForm
  1. 处理 GET 请求(显示表单)

在处理 GET 请求的视图中,创建一个表单实例并将其传递给模板。

def my_form_view(request):form = MyForm()return render(request, 'my_template.html', {'form': form})
  1. 处理 POST 请求(处理表单提交)

在处理 POST 请求的视图中,检查表单是否有效,如果有效则处理表单提交的数据。

def my_form_view(request):if request.method == 'POST':form = MyForm(request.POST)if form.is_valid():# 处理表单提交的数据username = form.cleaned_data['username']email = form.cleaned_data['email']password = form.cleaned_data['password']# 进行进一步的处理,如保存到数据库等else:form = MyForm()return render(request, 'my_template.html', {'form': form})

在模板中显示表单:

  1. 渲染表单

在模板中使用 {{ form }} 或循环渲染表单的各个字段。

<form method="post" action="{% url 'my_form_view' %}">{% csrf_token %}{{ form.as_p }}<button type="submit">Submit</button>
</form>

相关文章:

全网最全Django面试题整理(一)

Django 中的 MTV 是什么意思&#xff1f; 在Django中&#xff0c;MTV指的是“Model-Template-View”&#xff0c;而不是常见的MVC&#xff08;Model-View-Controller&#xff09;架构。Django的设计理念是基于MTV的 Model&#xff08;模型&#xff09; 模型代表数据存取层&am…...

vue统一登录

说明&#xff1a; 统一登录其实就是前端去判断Url地址的token 之后如果有token未过期就直接跳转到首页。 说到浏览器输入url地址&#xff0c;那从浏览器输入地址一共发生了几件事大致如下&#xff1a; DNS解析域名&#xff0c;获取IP地址 --》 建立TCP连接&#xff08;三次握…...

MVSNet论文笔记

MVSNet论文笔记 摘要1 引言2 相关基础2.1 多视图立体视觉重建&#xff08;MVS Reconstruction&#xff09;2.2 基于学习的立体视觉&#xff08;Learned Stereo&#xff09;2.3 基于学习的多视图的立体视觉&#xff08;Learned MVS&#xff09; 3 MVSNet3.1 网络架构3.2 提取图片…...

大型 APP 的性能优化思路

做客户端开发都基本都做过性能优化&#xff0c;比如提升自己所负责的业务的速度或流畅性&#xff0c;优化内存占用等等。但是大部分开发者所做的性能优化可能都是针对中小型 APP 的&#xff0c;大型 APP 的性能优化经验并不会太多&#xff0c;毕竟大型 APP 就只有那么几个&…...

K8S配置资源管理

这里写目录标题 K8S配置资源管理一.Secret1.介绍2.Secret 有四种类型3.创建 Secret4.使用方式 二.ConfigMap1.介绍2.创建 ConfigMap3.Pod 中使用 ConfigMap4.用 ConfigMap 设置命令行参数5.通过数据卷插件使用ConfigMap6.ConfigMap 的热更新7.ConfigMap 更新后滚动更新 Pod K8S…...

Redis 的集群模式实现高可用

来源&#xff1a;Redis高可用&#xff1a;武林秘籍存在集群里&#xff0c;那稳了~ (qq.com) 1. 引言 前面我们已经聊过 Redis 的主从同步&#xff08;复制&#xff09;和哨兵机制&#xff0c;这期我们来聊 Redis 的集群模式。 但是在超大规模的互联网应用中&#xff0c;业务规…...

21、嵌套路由实战操作

1、创建内嵌子路由&#xff0c;你需要添加一个vue文件&#xff0c;同时添加一个与该文件同名的目录用来存放子视图组件。 2、在父组件&#xff08;.vue&#xff09;内增加用于显示子视图内容 新建文件 pages\index_id.vue 生成的对应路由 {path: "/",component: _…...

WPF 控件的缩放和移动

WPF 控件的缩放和移动 1.页面代码 <ContentControl ClipToBounds"True" Cursor"SizeAll"><Viewboxx:Name"viewbox"MouseDown"viewbox_MouseDown"MouseMove"viewbox_MouseMove"MouseWheel"Viewbox_MouseWhee…...

Python and和or的优先级实例比较

Python and和or的优先级 and和or都是Python的逻辑运算符&#xff0c;都为保留字。通常情况下&#xff0c;在没有括号影响&#xff0c;and和or的优先级中and在代码的逻辑运算过程中会相对优先一些&#xff0c;及在同一行的Python代码中&#xff0c;and会优先与or执行。下面将通…...

数据结构与算法编程题2

逆置线性表&#xff0c;使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …...

Java开发者的Python快速进修指南:控制之if-else和循环技巧

简单介绍 在我们今天的学习中&#xff0c;让我们简要了解一下Python的控制流程。考虑到我们作为有着丰富Java开发经验的程序员&#xff0c;我们将跳过一些基础概念&#xff0c;如变量和数据类型。如果遇到不熟悉的内容&#xff0c;可以随时查阅文档。但在编写程序或逻辑时&…...

二进制部署k8s集群-过程中的问题总结(接上篇的部署)

1、kube-apiserver部署过程中的问题 kube-apiserver.conf配置文件更改 2、calico的下载地址 curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O 这里如果kubernetes的节点服务器为多网卡配置会产生报错 修改calino.yaml配置文件 解决方法&#xff1a; 调…...

IOS 关于CoreText的笔记

放大 一.CoreText计算attributeString显示所占区域 百度搜索有三种方法&#xff1a; 1.方法 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context 2.使用CTFrameRef 的 CTFrameGetLin…...

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统&#xff0c;它可以与用户进行自由的对话&#xff0c;不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力&#xff0c;以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…...

Hive常见的面试题(十二道)

Hive 1. Hive SQL 的执行流程 ⾸先客户端通过shell或者Beeline等⽅式向Hive提交SQL语句,之后sql在driver中经过 解析器&#xff08;SQL Parser&#xff09;&#xff1a;将 SQL 字符串转换成抽象语法树 AST&#xff0c;这一步一般都用第三方工具库完成&#xff0c;比如 ANTLR&…...

1688商品详情API跨境专用接口php java

一、引言 随着全球电子商务的快速发展&#xff0c;跨境电子商务已经成为一种重要的国际贸易形式。1688作为全球最大的B2B电子商务平台之一&#xff0c;不仅拥有大量的商品资源&#xff0c;还为商家提供了丰富的API接口&#xff0c;以实现更高效、更便捷的电子商务活动。其中&a…...

h264流播放

参考文章&#xff1a; Android MediaCodec硬解码H264文件-CSDN博客...

02-1解析xpath

我是在edge浏览器中安装的xpath&#xff0c;需要安装的朋友可以参考下面这篇博客最新版edge浏览器中安装xpath插件 一、xpathd的使用 安装lxml pip install lxml ‐i https://pypi.douban.com/simple导入lxml.etree from lxml import etreeetree.parse() 解析本地文件 htm…...

Python算法——树的镜像

Python中的树的镜像算法详解 树的镜像是指将树的每个节点的左右子树交换&#xff0c;得到一棵新的树。在本文中&#xff0c;我们将深入讨论如何实现树的镜像算法&#xff0c;提供Python代码实现&#xff0c;并详细说明算法的原理和步骤。 树的镜像算法 树的镜像可以通过递归…...

ModStartCMS v7.6.0 CMS备份恢复优化,主题开发文档更新

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...