Django知识点总结
因为最近在搞一个Python项目,使用的Django框架。所以快速学习了一下这个web框架。并做一些总结。
Django官网的介绍:Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.
Django是一个高级Python web框架,它鼓励快速开发和清晰、实用的设计。由经验丰富的开发者构建,它处理了许多web开发的繁琐工作,这样你就可以专注于编写你的应用程序,而不需要重新发明轮子。
目录
1.Django项目结构
2.Django 模型 (Models)
3.Django 视图 (Views)
4.Django 模板 (Templates)
5.Django 表单 (Forms)
6. Django URL 配置 (URL Configuration)
7.Django 表单验证 (Form Validation)
8.Django 管理界面 (Admin Interface)
9.Django 中间件 (Middleware)
10.Django 信号 (Signals)
11.Django 表单渲染与提交处理
12.Django 静态文件和媒体管理
13.Django 会话 (Sessions)
14.Django 认证系统 (Authentication System)
15.Django 表单字段 (Form Fields)
16.Django 模板标签和过滤器 (Template Tags and Filters)
17.Django 模型查询 (Model Queries)
18.Django 表单的自定义验证和错误消息
19.Django 测试框架 (Testing Framework)
20.Django 国际化和本地化 (Internationalization and Localization)
21.Django安全性
22. Django REST framework
23.Django 任务队列
24.Django 邮件支持
(由于内容太多,所以分成两篇,还有一篇,从25开始)
1.Django项目结构
件 | 描述 |
---|---|
项目 | Django 项目的顶级目录。 |
应用 | 一个应用是Web应用程序,它执行某项功能,并且可以独立于其他应用运行。 |
模型 | 用于定义数据结构(数据库中的表)。 |
视图 | 应用逻辑的核心,用于处理HTTP请求并返回HTTP响应。 |
模板 | HTML文件,可以包含变量,用于生成动态的网页内容。 |
表单 | 用于创建HTML表单,处理用户输入。 |
URL分发器 | Django URL分发器是URL和视图之间的映射。 |
设置 | Django项目的配置文件。 |
管理界面 | 一个自动生成的管理界面,用于管理Django项目中的数据。 |
信号 | Django信号允许某些发送者通知一组接收者发生了某件事情。 |
表单媒体 | 表单可能会用到的媒体文件,如CSS或JavaScript文件。 |
示例:
假设我们有一个博客应用,其结构可能如下:
myblog/
myblog/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
blog/
__init__.py
models.py
tests.py
views.py
admin.py
apps.py
migrations/
templates/
urls.py
manage.py
db.sqlite3
在这个示例中,myblog
是项目的根目录,它包含了一个同名的子目录,这是Django项目的常见布局。blog
是一个应用,它包含了所有的模型、视图、表单和模板等文件。settings.py
包含了项目的配置,urls.py
包含了URL分发器的定义。
2.Django 模型 (Models)
Django的模型用于定义应用程序的数据结构,它们是与数据库表相对应的Python类。
概念 | 描述 |
---|---|
Field | 代表数据库中的列,用于定义字段类型和选项。 |
Model | 一个继承自django.db.models.Model 的类,代表数据库中的一个表。 |
Meta | 可选的类,用于定义模型的元数据,如排序选项、数据库表名等。 |
Manager | 用于创建查询集的接口,可以自定义以提供额外的查询方法。 |
QuerySet | 模型对象的集合,可以执行数据库查询。 |
Form | 与模型相关联的表单,用于创建和管理用户输入。 |
Admin | Django管理界面中用于管理模型的接口。 |
Migrations | 数据库迁移,用于在数据库中创建、修改或删除模型的表。 |
示例:
假设我们有一个博客应用,需要定义一个文章模型:
from django.db import modelsclass Article(models.Model):title = models.CharField(max_length=200)content = models.TextField()published_date = models.DateTimeField(auto_now_add=True)last_modified = models.DateTimeField(auto_now=True)author = models.ForeignKey('auth.User', on_delete=models.CASCADE)def __str__(self):return self.titleclass Meta:ordering = ['-published_date']
这个示例中,Article
是一个模型,它定义了博客文章的数据结构。title
、content
、published_date
和 last_modified
是字段,分别对应数据库表中的列。author
是一个外键字段,它指向auth.User
模型,表示文章的作者。Meta
类用于指定默认的排序方式。
3.Django 视图 (Views)
视图是Django应用的核心,用于处理HTTP请求并返回HTTP响应。视图可以是简单的Python函数,也可以是基于类的视图。
概念 | 描述 |
---|---|
Function-based View (FBV) | 基于函数的视图,使用Python函数处理请求。 |
Class-based View (CBV) | 基于类的视图,使用Python类处理请求,提供可重用的视图组件。 |
HTTP Methods | 视图可以处理的HTTP请求方法,如GET、POST、PUT、DELETE等。 |
Request Object | 包含HTTP请求信息的对象,如请求头、请求体等。 |
Response Object | 用于构造HTTP响应的对象,可以包含状态码、内容、头部等。 |
URLconf | URL配置,用于将URL路径映射到视图函数。 |
Template Rendering | 使用模板生成HTML内容的过程。 |
Context | 传递给模板的上下文数据,用于动态生成网页内容。 |
Form Handling | 表单处理,包括显示表单和处理表单提交。 |
Generic View | 预构建的基于类的视图,适用于常见的Web应用场景。 |
示例:
以下是一个简单的基于函数的视图,用于返回一个欢迎信息:
from django.http import HttpResponsedef welcome(request):name = request.GET.get('name', 'World')return HttpResponse(f"Hello, {name}!")
这个示例中,welcome
函数是一个视图,它从GET请求中获取name
参数,并返回一个包含问候语的HttpResponse
对象。
4.Django 模板 (Templates)
Django模板是一个强大的工具,用于生成动态的HTML内容。模板可以包含变量、标签和过滤器,用于控制页面的内容和显示。
概念 | 描述 |
---|---|
变量 | 用于在模板中插入上下文数据。 |
标签 | 用于执行特定的操作,如循环、条件判断等。 |
过滤器 | 对变量进行处理,如格式化日期、转换为大写等。 |
继承 | 允许模板继承其他模板,共享布局和重复利用代码。 |
块 | 用于在继承的模板中定义可替换的区域。 |
自定义标签 | 创建自定义的模板标签,以封装复杂的逻辑。 |
模板继承 | 允许模板之间相互继承,实现布局的一致性。 |
上下文 | 传递给模板的数据,用于动态生成内容。 |
模板渲染 | Django视图调用模板的过程,将上下文数据插入模板。 |
示例:以下是一个简单的Django模板示例,它显示一个列表和用户的姓名
<!DOCTYPE html>
<html>
<head><title>My Webpage</title>
</head>
<body><h1>Welcome, {{ user.name }}!</h1><ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}</ul>
</body>
</html>
这个示例中,{{ user.name }}
是一个变量,它将从上下文中获取user
对象的name
属性。{% for item in items %}
是一个标签,它将遍历上下文中的items
列表,并为每个元素生成一个列表项。
5.Django 表单 (Forms)
Django提供了一个强大的表单处理框架,用于创建、验证和处理HTML表单。
概念 | 描述 |
---|---|
Form Class | Django表单类,用于定义表单的结构和验证规则。 |
Field | 表单中的一个字段,对应HTML表单中的一个输入控件。 |
Widget | 用于渲染字段的HTML控件,如文本框、复选框等。 |
Form Validation | 表单提交后,Django将自动进行数据验证。 |
Bound Field | 表单渲染后,每个字段都对应一个Bound Field对象。 |
Errors | 表单验证失败时的错误信息。 |
Formsets | 用于处理多个相同表单的集合。 |
ModelForm | 一个特殊类型的表单,它与Django模型自动关联。 |
Media | 表单可能需要的CSS和JavaScript文件。 |
Custom Validation | 自定义验证方法,用于执行额外的验证逻辑。 |
示例: 以下是一个使用Django表单创建用户注册表单的示例
from django import forms
from django.contrib.auth.models import Userclass UserRegistrationForm(forms.ModelForm):password = forms.CharField(widget=forms.PasswordInput)confirm_password = forms.CharField(widget=forms.PasswordInput)class Meta:model = Userfields = ['username', 'email']def clean(self):cleaned_data = super().clean()password = cleaned_data.get("password")confirm_password = cleaned_data.get("confirm_password")if password and confirm_password and password != confirm_password:self.add_error('confirm_password', "Passwords do not match.")
这个示例中,UserRegistrationForm
是一个继承自ModelForm
的表单类,它关联到Django内置的User
模型。除了username
和email
字段外,表单还包括了password
和confirm_password
字段,用于验证密码是否匹配。
6. Django URL 配置 (URL Configuration)
URL配置是Django应用中用于将URL路径映射到视图函数的机制。
概念 | 描述 |
---|---|
URL Pattern | 用于匹配URL的模式,可以是字符串或正则表达式。 |
URL Resolver | 解析器,用于将URL映射到视图。 |
URL Name | URL的名称,用于在模板和代码中引用特定的URL。 |
URLconf | URL配置文件,包含URL模式的列表。 |
Path | 用于定义简单URL模式的函数。 |
Re_path | 用于定义基于正则表达式的URL模式的函数。 |
Include | 用于将其他URLconf包含到当前URLconf中。 |
Namespace | 用于组织URL,允许多个应用使用相同的URL名称。 |
Reverse Resolution | 从视图名称和参数解析出URL的过程。 |
URL Parameters | 传递给视图的参数,可以是路径参数或查询参数。 |
示例:以下是Django项目的URL配置示例
from django.urls import path, include
from myapp.views import home_view, about_view, ArticleListViewurlpatterns = [path('', home_view, name='home'),path('about/', about_view, name='about'),path('articles/', include(('blog.urls', 'blog'), namespace='blog')),
]
这个示例中,path
函数用于定义URL模式,第一个参数是URL路径,第二个参数是视图函数,name
参数为URL提供一个唯一的标识符。include
函数用于将博客应用的URL配置包含到主URL配置中,并指定了一个命名空间blog
。
7.Django 表单验证 (Form Validation)
Django表单提供了一套完整的验证机制,确保用户输入的数据符合预期的格式和规则。
概念 | 描述 |
---|---|
内置验证 | Django表单字段拥有一套默认的验证规则。 |
自定义验证 | 通过覆盖clean_<field_name> 方法或使用clean 方法来添加自定义验证逻辑。 |
错误消息 | 为验证错误提供自定义的错误消息。 |
必填字段 | 使用blank=False 和null=False 来标记必填字段。 |
字段类型 | Django提供多种字段类型,如CharField 、IntegerField 等,每种类型都有其特定的验证规则。 |
最大长度/最小长度 | 使用max_length 和min_length 参数来限制输入的长度。 |
选择字段 | 使用choices 参数来限制字段只能从预定义的选项中选择。 |
正则表达式验证 | 使用正则表达式来定义复杂的验证规则。 |
跨站请求伪造保护 | Django表单自动提供了CSRF保护。 |
自定义错误信息 | 为每个字段的验证错误提供自定义的错误信息。 |
示例: 以下是自定义表单验证的示例
from django import forms
from django.core.exceptions import ValidationErrorclass SignupForm(forms.Form):username = forms.CharField()email = forms.EmailField()def clean_username(self):username = self.cleaned_data.get('username')if len(username) < 4:raise ValidationError('Username must be at least 4 characters long.')return usernamedef clean(self):cleaned_data = super().clean()username = cleaned_data.get('username')email = cleaned_data.get('email')if username and User.objects.filter(username=username).exists():raise ValidationError('Username is already taken.')if email and User.objects.filter(email=email).exists():raise ValidationError('Email is already registered.')return cleaned_data
这个示例中,SignupForm
表单通过覆盖clean_username
方法来确保用户名至少有4个字符。clean
方法则用于检查用户名和邮箱是否已经存在。
8.Django 管理界面 (Admin Interface)
Django的管理界面是一个自动生成的基于Web的界面,用于管理Django项目中的数据。
概念 | 描述 |
---|---|
Django Admin | Django提供的管理界面,用于管理数据库中的内容。 |
ModelAdmin | 用于自定义模型在管理界面中的表示方式的类。 |
AdminSite | 管理站点的顶级对象,可以创建自定义的管理界面。 |
Inlines | 在管理界面中,将相关对象以内联形式编辑的方式。 |
Filters | 在管理界面中添加筛选器,方便用户筛选查找数据。 |
Actions | 为管理界面的变更列表页面提供批量操作。 |
Custom Templates | 使用自定义模板来修改管理界面的外观。 |
User Authentication | 管理界面具有用户认证和权限控制。 |
Modules | 管理界面中的模块,通常对应一个模型或一组相关对象。 |
Views | 管理界面提供的各种视图,如列表视图、添加视图、更改视图等。 |
示例:以下是如何为Article模型自定义管理界面的示例
from django.contrib import admin
from .models import Articleclass ArticleAdmin(admin.ModelAdmin):list_display = ('title', 'author', 'published_date')list_filter = ('author', 'published_date')search_fields = ('title', 'content')admin.site.register(Article, ArticleAdmin)
这个示例中,ArticleAdmin
类定义了Article
模型在管理界面中的显示方式。list_display
属性定义了列表视图中显示哪些字段,list_filter
添加了筛选器,而search_fields
允许在管理界面中搜索文章。
9.Django 中间件 (Middleware)
Django中间件提供了一种机制,可以在请求和响应的处理过程中添加自定义的处理逻辑。
概念 | 描述 |
---|---|
请求中间件 | 在Django处理请求之前运行的中间件。 |
响应中间件 | 在Django处理完请求并生成响应之后,发送到浏览器之前运行的中间件。 |
Middleware Classes | 中间件类,需要实现特定的方法来定义中间件的行为。 |
Middleware Stack | 中间件的执行顺序,可以通过设置文件进行配置。 |
自定义中间件 | 创建自定义的中间件类以添加特定的功能。 |
Middleware Signals | Django的信号机制,可以在中间件中使用。 |
Middleware Security | 中间件可以用于提高应用的安全性,如CSRF保护。 |
Middleware Session | 用于处理会话的中间件。 |
Middleware Process View | 用于在视图处理请求之前或之后运行的中间件。 |
Middleware Exception | 用于处理异常的中间件。 |
示例:以下是创建自定义中间件的示例
class MyCustomMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 这里可以添加处理逻辑response = self.get_response(request)return response# 可选:处理请求之前def process_view(self, request, view_func, view_args, view_kwargs):return None # 或者返回一个HttpResponse对象# 可选:处理请求之后def process_response(self, request, response):return response
这个示例中,MyCustomMiddleware
是一个简单的中间件类,它在请求处理管道中可以插入自定义逻辑。__call__
方法会在请求处理之前运行,而process_view
和process_response
方法则分别在视图处理之前和之后运行。
10.Django 信号 (Signals)
Django的信号允许某些发送者通知一组接收者发生了某件事情。这是一种实现解耦的方法,可以在Django的生命周期事件中添加自定义逻辑。
概念 | 描述 |
---|---|
信号 | Django中的一种机制,允许在特定事件发生时执行自定义代码。 |
发送者 | 触发信号的对象。 |
接收者 | 信号的回调函数,定义了当信号发生时要执行的代码。 |
连接信号 | 将接收者函数连接到特定信号上的过程。 |
内置信号 | Django提供的一系列内置信号,如post_save 、pre_delete 等。 |
自定义信号 | 创建自定义信号以在特定业务逻辑中使用。 |
信号调度器 | Django内部用于调度信号的组件。 |
信号参数 | 信号可以传递给接收者的参数,通常是触发信号的对象。 |
信号禁用 | 在某些情况下临时禁用信号。 |
示例:以下是如何使用Django信号的示例
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Article@receiver(post_save, sender=Article)
def update_search_index(sender, instance, **kwargs):# 当Article对象被保存后,更新搜索索引pass
这个示例中,我们连接了一个名为update_search_index
的接收者函数到Article
模型的post_save
信号上。这意味着每当有一个新的Article
对象被保存时,update_search_index
函数就会被调用
11.Django 表单渲染与提交处理
Django表单不仅用于收集用户输入,还包括渲染成HTML以及处理表单提交的逻辑。
概念 | 描述 |
---|---|
表单渲染 | 将表单对象转换成HTML的过程,用于在客户端显示。 |
表单提交 | 用户填写表单并发送到服务器的过程。 |
表单绑定 | 将提交的数据绑定到表单对象上,以便于进行验证。 |
表单无效 | 如果表单验证失败,表单对象会标记为无效,并收集错误信息。 |
表单有效 | 如果表单验证通过,表单对象会标记为有效。 |
错误收集 | 收集表单中所有字段的验证错误。 |
表单重渲染 | 当表单无效时,需要将表单连同错误信息重新渲染给用户。 |
GET请求与表单 | 使用GET请求预填充表单数据。 |
POST请求与表单 | 使用POST请求提交表单数据。 |
示例: 以下是如何在Django视图中渲染和处理表单的示例
from django.http import HttpResponse
from django.shortcuts import render
from .forms import ContactFormdef handle_contact_form(request):if request.method == 'POST':form = ContactForm(request.POST)if form.is_valid():# 处理有效的表单数据form.save()return HttpResponse("Thanks for your message!")else:form = ContactForm()return render(request, 'contact.html', {'form': form})
这个示例中,当用户通过POST方法提交表单时,我们创建了一个绑定到请求POST数据的表单对象。如果表单有效,我们处理表单数据并返回一个响应。如果表单无效,我们重新渲染表单,并将表单对象及其错误信息传递给模板。
12.Django 静态文件和媒体管理
在Web开发中,静态文件(如CSS、JavaScript文件)和媒体文件(如图片、视频)是构成用户界面和提供附加内容的重要组成部分。Django提供了管理这些文件的机制。
概念 | 描述 |
---|---|
静态文件 | 指在Web开发中通常不会频繁改变的文件,如CSS、JavaScript文件。 |
媒体文件 | 指用户上传的文件,如图片、文档等。 |
STATIC_URL | 设置静态文件的URL前缀。 |
STATICFILES_DIRS | 在开发过程中,指定额外的目录,Django将这些目录中的文件视为静态文件。 |
STATIC_ROOT | 在生产环境中,指定一个根目录,Django会将所有的静态文件收集到这里。 |
媒体URL和MEDIA_ROOT | 类似于静态文件的设置,但用于媒体文件。 |
收集静态 | 使用collectstatic 命令将所有静态文件收集到STATIC_ROOT 指定的目录下。 |
管理媒体文件 | Django提供了一个管理界面来上传和管理媒体文件。 |
自定义存储 | 使用自定义的存储后端来处理静态和媒体文件的存储逻辑。 |
示例: 以下是如何在Django中设置静态文件和媒体文件的示例
# settings.py# 指定静态文件的URL前缀和根目录
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static", # 开发过程中的静态文件目录
]# 指定媒体文件的URL前缀和根目录
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / "media" # 媒体文件的文件系统路径
这个示例中,我们设置了静态文件和媒体文件的URL前缀以及它们在开发过程中的目录。在生产环境中,通常会使用像Amazon S3或CDN这样的服务来托管这些文件。
推荐直接放在项目根目录下的static目录,当然也可以改变目录,比如自定义个其他目录(根目录下的common目录下的static目录)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [os.path.join(BASE_DIR, "common/static"),
]
13.Django 会话 (Sessions)
Django的会话框架提供了一种存储用户会话数据的方法,这些数据可以用来跟踪用户的状态。
概念 | 描述 |
---|---|
会话 | 存储在服务器端的数据,用于跟踪用户的状态。 |
会话ID | 用于标识用户会话的唯一标识符,通常存储在cookie中。 |
会话数据 | 用户会话的相关信息,如用户偏好、购物车内容等。 |
会话引擎 | Django支持的会话后端,如数据库、缓存或文件。 |
设置会话 | 在视图或中间件中设置会话数据。 |
获取会话 | 从会话中读取数据。 |
删除会话 | 清除会话中的数据或结束整个会话。 |
会话超时 | 会话的有效期,超时后需要重新登录。 |
安全会话 | 使用HTTPS和安全的cookie标志来保护会话数据。 |
示例:以下是如何在Django中使用会话的示例
def set_session(request):request.session['mydata'] = 'This is a test.'def get_session(request):mydata = request.session.get('mydata', 'Default value')return HttpResponse(mydata)def clear_session(request):del request.session['mydata']return HttpResponse('Session data cleared')
这个示例中,我们展示了如何在视图中设置、获取和删除会话数据。会话数据存储在request.session
字典中。
14.Django 认证系统 (Authentication System)
Django提供了一个强大的认证系统,用于管理用户认证、权限和用户组。
概念 | 描述 |
---|---|
用户模型 | Django默认使用auth.User 模型,也可以自定义用户模型。 |
认证 | 验证用户身份的过程。 |
权限 | 控制用户对视图、模板或其他资源的访问。 |
用户组 | 允许将权限分配给一组用户。 |
信号 | Django认证系统发出的信号,如user_logged_in 。 |
密码管理 | Django提供密码散列、密码验证和密码重置功能。 |
令牌认证 | 用于API的无状态认证机制。 |
会话认证 | 传统的基于cookie的认证机制。 |
自定义认证 | 创建自定义的认证后端。 |
多因素认证 | 可以集成多因素认证以增加安全性。 |
示例:以下是如何在Django中实现用户登录和注销的示例
from django.contrib.auth import authenticate, login, logoutdef login_view(request):if request.method == 'POST':username = request.POST['username']password = request.POST['password']user = authenticate(request, username=username, password=password)if user is not None:login(request, user)return HttpResponse("You are logged in.")else:return HttpResponse("Invalid username or password.")else:return render(request, 'login.html')def logout_view(request):logout(request)return HttpResponse("You are logged out.")
这个示例中,login_view
函数处理用户登录,通过authenticate
函数验证用户凭据,如果成功则使用login
函数创建用户会话。logout_view
函数使用logout
函数结束用户会话。
15.Django 表单字段 (Form Fields)
Django表单框架提供了多种字段类型,用于处理不同类型的用户输入。
概念 | 描述 |
---|---|
CharField | 文本框,用于输入较短的文本。 |
EmailField | 邮箱输入框,自动验证输入是否为有效的邮箱地址。 |
IntegerField | 数字输入框,用于输入整数值。 |
DecimalField | 十进制数输入框,用于处理小数值。 |
DateField | 日期选择器,用于选择日期。 |
DateTimeField | 日期和时间选择器,用于选择日期和时间。 |
ChoiceField | 下拉菜单,从预定义的选项中选择一个值。 |
MultipleChoiceField | 多选下拉菜单,允许选择多个值。 |
BooleanField | 复选框,表示布尔值(True/False)。 |
FileField | 文件上传控件,用于上传文件。 |
ImageField | 图片上传控件,继承自FileField ,用于上传图片文件。 |
TypedChoiceField | 带类型检查的选项字段,确保选择的值是预期的类型。 |
SlugField | 用于输入简洁的标识符,如URL的一部分。 |
URLField | 输入框,用于输入URL地址,自动进行URL格式验证。 |
示例: 以下是如何在Django表单中使用不同字段类型的示例
from django import formsclass UserRegistrationForm(forms.Form):username = forms.CharField(label='Username', max_length=50)email = forms.EmailField(label='Email')age = forms.IntegerField(label='Age', min_value=18)birthdate = forms.DateField(label='Birth Date')password = forms.CharField(label='Password', widget=forms.PasswordInput)agree_terms = forms.BooleanField(label='Agree to Terms', required=True)favorite_color = forms.ChoiceField(label='Favorite Color', choices=[('red', 'Red'),('blue', 'Blue'),('green', 'Green'),])
这个示例中,我们定义了一个注册表单,包含了不同类型的字段,每个字段都通过forms.Field
的相应类来创建。
16.Django 模板标签和过滤器 (Template Tags and Filters)
Django模板系统提供了许多内置的标签和过滤器,用于在模板中执行常见的操作。
概念 | 描述 |
---|---|
标签 | 用于执行特定的操作,如循环、条件判断等。 |
过滤器 | 用于对模板变量进行处理,如格式化、转换等。 |
自定义标签 | 创建自定义的模板标签,以封装复杂的逻辑。 |
自定义过滤器 | 创建自定义的过滤器,以执行特定的数据转换。 |
注释标签 | 在模板中添加注释,这些注释不会在渲染后的页面上显示。 |
URL标签 | 用于生成视图的URL,支持命名的URL模式。 |
循环标签 | 如for ,用于在模板中遍历列表或字典。 |
条件标签 | 如if 、else ,用于在模板中实现条件逻辑。 |
转义过滤器 | 对输出进行HTML转义,防止跨站脚本攻击。 |
日期过滤器 | 对日期进行格式化。 |
字符串操作过滤器 | 如truncate 、upper 、lower 等,用于操作字符串。 |
示例: 以下是如何在Django模板中使用标签和过滤器的示例
<!-- 使用for标签遍历一个列表 -->
<ul>{% for item in items %}<li>{{ item.name }}</li>{% endfor %}
</ul><!-- 使用if标签进行条件判断 -->
<p>{% if user.is_authenticated %}Welcome, {{ user.username }}!{% endif %}</p><!-- 使用url标签生成视图的URL -->
<a href="{% url 'home' %}">Home</a><!-- 使用过滤器格式化输出 -->
<p>Published on: {{ article.pub_date|date:"F j, Y" }}</p><!-- 使用自定义过滤器 -->
<p>Custom filter: {{ some_value|my_custom_filter }}</p>
这个示例中,for
标签用于遍历一个名为items
的上下文变量,if
标签用于判断用户是否已认证,url
标签用于生成视图的URL,而date
过滤器用于格式化日期。
17.Django 模型查询 (Model Queries)
Django的ORM(Object-Relational Mapping)系统提供了一套强大的查询API,用于从数据库中检索和操作数据。
概念 | 描述 |
---|---|
查询集 (QuerySet) | 模型对象的集合,可以执行数据库查询。 |
筛选 (Filter) | 用于筛选特定记录的查询。 |
排除 (Exclude) | 用于排除特定记录的查询。 |
排序 (Ordering) | 用于对查询结果进行排序。 |
聚合 (Aggregate) | 用于执行字段的聚合操作,如求和、平均值等。 |
F对象 | 用于引用模型中的字段,常用于更新操作。 |
Q对象 | 用于实现复杂的查询。 |
迭代 (Iterate) | 遍历QuerySet以获取模型实例。 |
计数 (Count) | 计算QuerySet中的记录数。 |
切片 (Slice) | 获取QuerySet中的子集。 |
更新 (Update) | 更新数据库中的记录。 |
删除 (Delete) | 从数据库中删除记录。 |
示例: 以下是如何使用Django模型查询的示例
from django.db import modelsclass Article(models.Model):title = models.CharField(max_length=100)published_date = models.DateTimeField()# 获取所有已发布的文章
published_articles = Article.objects.filter(published_date__lte=timezone.now())# 获取标题包含"Django"的文章,排除标题为"Hello"的文章
filtered_articles = Article.objects.filter(title__icontains='django').exclude(title='Hello')# 统计文章数量
article_count = Article.objects.count()# 更新所有文章的标题
Article.objects.all().update(title='New Title')# 删除标题为空的文章
Article.objects.filter(title='').delete()
这个示例中展示了如何使用Django的查询API来执行不同的数据库操作。
18.Django 表单的自定义验证和错误消息
Django表单框架允许开发者自定义表单字段的验证逻辑,并为验证失败的情况提供详细的错误消息。
概念 | 描述 |
---|---|
自定义验证方法 | 在表单或表单字段类中定义额外的验证逻辑。 |
错误消息 | 为不同的验证错误指定自定义的错误消息。 |
错误信息对象 | 使用ErrorDict 和ErrorList 来处理表单和字段的错误信息。 |
跨字段验证 | 使用cleaned_data 来在多个字段之间进行验证。 |
表单方法 | 覆盖表单类的方法,如clean 、validate 等,来添加验证逻辑。 |
示例:以下是如何在Django表单中实现自定义验证和错误消息的示
from django import forms
from django.core.exceptions import ValidationErrorclass CustomUserForm(forms.ModelForm):username = forms.CharField()email = forms.EmailField()class Meta:model = Userfields = ['username', 'email']def clean_username(self):username = self.cleaned_data.get('username')if len(username) < 4:raise ValidationError('Username must be at least 4 characters long.')return usernamedef clean(self):cleaned_data = super().clean()username = cleaned_data.get('username')email = cleaned_data.get('email')if not username.endswith('@example.com'):self.add_error('username', 'Username must end with @example.com')if User.objects.filter(email=email).exists():self.add_error('email', 'An account with this email already exists.')return cleaned_data
这个示例中,我们定义了一个CustomUserForm
表单,它在clean_username
方法中验证用户名长度,并在clean
方法中进行跨字段验证,确保用户名以@example.com
结尾,同时检查邮箱是否已存在。
19.Django 测试框架 (Testing Framework)
Django提供了一个强大的测试框架,用于编写和运行自动化测试,以确保应用的正确性和稳定性。
概念 | 描述 |
---|---|
单元测试 | 对应用中最小的可测试部分进行测试,通常是模型或视图。 |
功能测试 | 对整个应用或特定功能进行测试,模拟用户与应用的交互。 |
测试客户端 | Django提供的一个工具,用于模拟浏览器的行为。 |
测试数据库 | Django测试框架支持多种数据库,可以在测试中使用特定的数据库。 |
断言 | 用于验证测试结果是否符合预期。 |
测试标记 | 用于标记测试用例,如@pytest.mark.django_db 。 |
测试夹具 | 测试中使用的预设数据和环境配置。 |
测试覆盖率 | 衡量测试覆盖了多少代码的指标。 |
测试套件 | 一组测试用例的集合。 |
测试运行器 | 用于运行测试用例的工具。 |
示例: 以下是如何在Django中编写单元测试的示例
from django.test import TestCase
from .models import Articleclass ArticleModelTest(TestCase):def setUp(self):# 创建测试夹具数据Article.objects.create(title='Test Article', content='This is a test.')def test_string_representation(self):# 测试模型的字符串表示article = Article.objects.get(id=1)self.assertEqual(str(article), 'Test Article')def test_article_content(self):# 测试文章内容article = Article.objects.get(id=1)self.assertEqual(article.content, 'This is a test.')def test_articles_created(self):# 测试创建的文章数量self.assertEqual(Article.objects.count(), 1)
这个示例中,ArticleModelTest
类包含了针对Article
模型的多个测试方法。setUp
方法会在每个测试方法前运行,用于设置测试夹具。
20.Django 国际化和本地化 (Internationalization and Localization)
Django支持国际化和本地化,使得应用可以轻松地适应不同的语言和地区。
概念 | 描述 |
---|---|
国际化 (Internationalization) | 准备一个应用或文档,使其能够无障碍地适应不同的语言和地区,而不做代码级别的改变。 |
本地化 (Localization) | 将国际化的应用或文档,根据特定语言和地区的需要进行调整。 |
gettext | Django使用的库,用于提取翻译字符串和实现翻译功能。 |
语言设置 | Django支持动态地根据请求设置用户界面的语言。 |
翻译字符串 | 需要翻译的文本字符串。 |
.po 文件 | 包含翻译的文件,由gettext工具使用。 |
时区支持 | Django支持不同地区的时区设置。 |
格式化 | 对日期、时间、数字等进行本地化格式化。 |
双语支持 | 应用支持多种语言的输入和显示。 |
示例: 以下是如何在Django中实现国际化和本地化的示例
- 在
settings.py
中启用国际化,并设置默认语言:
USE_I18N = True
LANGUAGE_CODE = 'en-us'
USE_L10N = True # 启用地区格式化,如日期和数字
TIME_ZONE = 'UTC'
2.使用makemessages
命令从代码中提取翻译字符串:
python manage.py makemessages -l es
3. 创建或编辑.po
文件,添加翻译:
msgid "Welcome to our site."
msgstr "Bienvenido a nuestro sitio."
4.在模板中使用翻译:
<p>{% trans "Welcome to our site." %}</p>
5. 在视图中动态设置语言:
def set_language(request):lang_code = request.GET.get('lang')if lang_code:request.session[LANGUAGE_SESSION_KEY] = lang_codereturn redirect('home')
这个示例中,我们展示了如何在Django中设置国际化支持,提取翻译字符串,以及如何在模板和视图中使用翻译。
21.Django安全性
Django设计时就考虑了安全性,提供了多种机制来保护Web应用。以下是Django安全性的关键点总结:
安全性特性 | 描述 | 示例 |
---|---|---|
CSRF保护 | Django自动为每个表单生成CSRF令牌,防止跨站请求伪造攻击。 | 在模板中使用 {% csrf_token %} 插入CSRF令牌。 |
XSS保护 | Django模板自动转义HTML,防止跨站脚本攻击。 | 不需要特别操作,模板系统默认转义变量内容。 |
密码哈希 | 用户密码使用强哈希算法进行存储,而不是明文。 | 使用make_password 函数创建哈希密码,check_password 进行验证。 |
SQL注入保护 | Django ORM自动转义查询参数,防止SQL注入攻击。 | 使用ORM查询构造器,如Article.objects.filter(pk=1) 。 |
HTTPS强制 | 可以设置Django来强制使用HTTPS。 | 在settings.py 中设置SECURE_SSL_REDIRECT = True 。 |
用户认证 | 提供用户认证和权限控制。 | 使用@login_required 装饰器限制视图的访问。 |
内容安全策略 | 可以通过设置来增强Web应用的CSP。 | 在settings.py 中设置CSP_DEFAULT_SRC = ("'self'",) 。 |
安全的Cookie | 可以设置Cookie为仅通过HTTPS发送。 | 在settings.py 中设置SESSION_COOKIE_SECURE = True 。 |
点击劫持保护 | Django提供中间件防止点击劫持攻击。 | 在settings.py 中设置X_FRAME_OPTIONS = 'DENY' 。 |
安全的密码重置 | 提供安全的密码重置流程,通过邮箱验证。 | 使用PasswordResetView 和PasswordResetConfirmView 。 |
用户权限 | 可以为用户分配不同的权限。 | 使用User.has_perm('app.label') 检查权限。 |
用户组 | 用户可以归属于不同的组,方便权限管理。 | 使用Group 和Group.objects.add() 管理用户组。 |
以下是一些Django安全性特性的具体示例:
- CSRF保护示例:在HTML模板中,使用Django模板标签来添加CSRF令牌。
<form method="post">{% csrf_token %}<input type="text" name="username"><input type="submit" value="Submit">
</form>
2.密码哈希示例: 使用Django内置的函数来创建和验证哈希密码。
from django.contrib.auth.hashers import make_password, check_passwordhashed_password = make_password('mypassword')
# 存储hashed_password到数据库# 在验证时
password = 'mypassword'
if check_password(password, hashed_password):print("Password is correct")
else:print("Password is incorrect")
3.HTTPS强制示例:
配置https的步骤:
3.1首先,你需要一个SSL证书。有两种主要类型的SSL证书:
付费证书:从证书颁发机构(CA)购买。
免费证书:可以使用Let's Encrypt,这是一个非营利组织,提供自动化的免费证书。
3.2配置Web服务器以使用SSL
对于Nginx,需要在server块中添加SSL配置。
server {listen 443 ssl;server_name www.yourdomain.com;ssl_certificate /path/to/your/cert.pem;ssl_certificate_key /path/to/your/key.pem;location / {proxy_pass http://unix:/path/to/your/project.sock;# 其他配置...}
}
3.3. 在项目中启用HTTPS
在settings.py
中启用Django的HTTPS安全措施:
# 强制使用HTTPS重定向
SECURE_SSL_REDIRECT = True# 如果用户已经通过HTTPS访问,则保持会话为HTTPS
SESSION_COOKIE_SECURE = True# CSRF保护cookie也通过HTTPS发送
CSRF_COOKIE_SECURE = True# 设置X-XSS-Protection标头
SECURE_BROWSER_XSS_FILTER = True# 设置X-Content-Type-Options响应头为nosniff
SECURE_CONTENT_TYPE_NOSNIFF = True# 如果使用Let's Encrypt,可以禁用此设置
SECURE_HSTS_SECONDS = 31536000 # 1 year
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
4. 用户权限示例:限制视图只有拥有特定权限的用户才能访问。
from django.contrib.auth.decorators import permission_required@permission_required('app.change_article', raise_exception=True)
def edit_article_view(request, article_id):# 视图逻辑
通过这些安全特性和示例,Django提供了一个安全的框架,帮助开发者构建安全的Web应用
22. Django REST framework
Django REST framework (DRF) 是一个强大的工具,用于构建Web API,以下是其关键特性的总结:
特性 | 描述 | 示例 |
---|---|---|
序列化器 (Serializers) | 用于将模型转换为JSON或其他内容类型,以及将输入数据反序列化为模型实例。 |
|
视图 (Views) | 提供多种视图类来处理API请求,如列表视图、详情视图等。 |
|
视图集 (Viewsets) | 用于简化API视图的创建,特别适合CRUD操作。 |
|
路由 (Routing) | 基于函数的路由系统,用于定义API的URL结构。 |
|
权限 (Permissions) | 控制对API的访问,可以定义自定义权限类。 |
|
分页 (Pagination) | 支持对API响应进行分页。 | 在视图或视图集中设置分页:pagination_class = PageNumberPagination |
版本控制 (Versioning) | 支持API版本的管理。 |
|
认证 (Authentication) | 提供多种认证方式,如基本认证、令牌认证等。 | 在视图中设置认证方式:authentication_classes = [SessionAuthentication, TokenAuthentication] |
过滤 (Filtering) | 支持对查询集进行过滤。 |
|
**关系 (Relations)) | 支持对模型关系的序列化。 | 在序列化器中定义关系:user = serializers.PrimaryKeyRelatedField(many=True) |
验证 (Validation) | 提供强大的数据验证机制。 | 在序列化器中使用validate_<field> 方法进行自定义验证。 |
自定义 (Customization) | 可以自定义序列化器、视图等组件。 | 创建自定义的序列化器类和视图类来满足特定的业务需求。 |
示例:以下是使用Django REST framework创建一个简单的用户API的示例
1.安装Django REST framework
pip install djangorestframework==3.13.1
2.配置Django settings(settings.py)
INSTALLED_APPS = [# ...'rest_framework',
]
3.创建一个简单的用户序列化器(serializers.py)
from rest_framework import serializers
from django.contrib.auth.models import Userclass UserSerializer(serializers.ModelSerializer):class Meta:model = Userfields = ('id', 'username', 'email')
4.创建一个视图以列出所有用户(views.py)
from rest_framework import generics
from django.contrib.auth.models import User
from .serializers import UserSerializerclass UserList(generics.ListAPIView):queryset = User.objects.all()serializer_class = UserSerializer
5.设置URL路由(urls.py)
from django.urls import path
from .views import UserListurlpatterns = [path('users/', UserList.as_view()),
]
6,运行应用
启动Django开发服务器,并在浏览器或Postman中访问 http://localhost:8000/users/
以查看用户列表。
通过以上步骤,你可以快速构建一个简单的用户API,这只是Django REST framework强大功能的一小部分。
23.Django 任务队列
知识点 | 描述 | Django-Q 示例 | Celery 示例 |
---|---|---|---|
安装 | 安装任务队列库的必要步骤。 | pip install django-q | pip install celery |
配置 | 在settings.py 中添加队列相关的配置。 | 添加到INSTALLED_APPS ,配置数据库迁移。 | 设置Celery相关的配置,如broker_url 。 |
任务定义 | 创建执行后台任务的函数。 | 使用标准的Python函数。 | 使用带有@task 装饰器的函数。 |
任务调度 | 安排任务在特定时间执行。 | 使用schedule 函数。 | 使用Celery Beat和定时任务调度。 |
异步任务 | 将任务提交到队列进行异步执行。 | 使用async_task 函数。 | 使用delay 方法。 |
任务执行 | 任务队列的工作进程执行任务。 | 使用qcluster 命令启动工作进程。 | 使用celeryd 命令启动工作进程。 |
结果存储 | 存储任务执行结果。 | 利用Django模型存储结果。 | 可以配置多种后端存储结果,如数据库、Redis。 |
任务重试 | 失败的任务可以被重试。 | 提供重试机制和超时设置。 | 提供重试策略和重试计数。 |
任务监控和管理 | 管理和监控任务队列的状态。 | 通过Django管理界面管理任务。 | 通常使用Celery自带的监控工具,如Flower。 |
信号和钩子 | 在任务执行前后执行额外逻辑。 | 提供信号如pre_enqueue 和pre_execute 。 | 使用Celery的事件和回调机制。 |
分布式支持 | 任务分布在多个工作节点上执行。 | 通过配置多个工作进程实现。 | 内置支持分布式系统,可以跨多个节点运行任务。 |
消息代理 | 中间件用于传递任务消息。 | 可选,支持多种后端如Redis。 | 依赖于外部的消息代理,如RabbitMQ或Redis。 |
定时任务 | 定时执行任务的能力。 | 支持cron表达式和固定间隔的调度。 | 支持复杂的定时任务,通过Celery Beat进行调度。 |
容错性和持久性 | 任务在执行过程中的容错处理。 | 任务持久化到数据库,支持故障转移。 | 支持任务持久化,具有强大的容错机制。 |
扩展性 | 根据需要扩展任务处理能力。 | 通过增加工作进程和利用多核处理器进行扩展。 | 通过增加工作节点和使用消息代理进行水平扩展。 |
文档和社区支持 | 项目文档的完整性和社区的活跃度。 | 相对较新的库,文档和社区正在增长。 | 成熟的库,拥有详尽的文档和活跃的社区支持 |
示例:给一个django-q的一个完整的示例
在 Django 项目的 settings.py
文件中,添加 django_q
到 INSTALLED_APPS
:
INSTALLED_APPS = [# ...'django_q',# ...
]
接着,你可以配置 django-q
使用不同的后端,例如使用默认的数据库后端:
DJANGO_Q = {'default': 'django_q.db.models', # 使用 Django ORM 作为队列后端'redis': {'BACKEND': 'django_q.backends.redis.RedisBackend','OPTIONS': {'host': 'localhost','port': 6379,'db': 0,'password': '',}},# 可以配置其它后端...
}
使用过程:
1.创建任务
创建一个任务函数,该函数将作为队列任务执行:
from django_q.models import Task, SUCCESS, FAILUREdef my_task():# 任务代码try:# 执行任务print("Task is running")return SUCCESSexcept Exception as e:return FAILURE, str(e)
2. 安排任务
使用 schedule
方法安排任务:
from django_q.models import TaskTask.function(my_task).enqueue()
或者,安排一个定时任务
from django_q.models import Task
from datetime import datetime, timedeltascheduled_time = datetime.now() + timedelta(seconds=30)
Task.function(my_task).schedule(scheduled_time)
3.运行队列工作者
使用以下命令启动一个队列工作者:
python manage.py qcluster
4.查看任务状态
可以查看任务的状态,例如:
from django_q.models import Tasktask = Task.objects.get(id=1)
if task.status == SUCCESS:print("Task succeeded!")
else:print("Task failed!")
5.重试失败的任务
如果任务失败,可以重试:
task.retry()
6.使用信号
django-q
提供了信号,允许你在任务开始、结束或失败时执行自定义逻辑。
from django_q import signalsdef task_started(sender, task, **kwargs):print('Task started:', task)signals.pre_save.connect(task_started)
注意事项:
- 队列工作者需要运行在你的服务器上,以监听并执行任务。
- 根据你的项目需求,可能需要配置多个工作者。
django-q
也支持 Django 管理命令,如qinit
初始化数据库、qstop
停止工作者等。
通过使用 django-q
,你可以在 Django 应用中轻松地实现后台任务处理,而无需复杂的设置。
24.Django 邮件支持
Django提供了一个强大的邮件支持系统,允许开发者发送电子邮件。以下是Django邮件支持的关键特性和配置的总结表格:
特性 | 描述 | 示例 |
---|---|---|
邮件后端 | Django支持多种邮件后端,如SMTP、文件系统或内存缓存。 | EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' |
SMTP邮件服务器 | 配置SMTP服务器的详细信息,包括邮箱地址、密码等。 | EMAIL_HOST = 'smtp.example.com' |
邮件发送 | 用于发送邮件的函数。 | django.core.mail.send_mail(subject, message, from_email, recipient_list, fail_silently=False) |
HTML邮件 | 发送HTML格式的邮件。 | django.core.mail.send_html_mail(subject, message, from_email, recipient_list, html_message=html_content, fail_silently=False) |
附件 | 向邮件添加附件。 | django.core.mail.EmailMessage.attach_file(filename) |
邮件模板 | 使用Django模板系统生成邮件内容。 | 使用django.template.loader.render_to_string 生成邮件模板内容 |
邮件优先级 | 设置邮件的优先级。 | django.core.mail.EmailMessage.priority |
邮件头部 | 自定义邮件的头部信息。 | django.core.mail.EmailMessage.extra_headers |
邮件队列 | Django可以将邮件排队,稍后一起发送以提高性能。 | django.core.mail.get_connection().send_messages(emails) |
邮件后端设置 | 配置邮件后端的额外选项,如使用TLS或SSL。 | EMAIL_USE_TLS = True |
默认从邮箱 | 设置默认发送邮件的邮箱地址。 | EMAIL_HOST_USER = 'user@example.com' |
密码 | 如果SMTP服务器需要认证,设置邮箱的密码。 | EMAIL_HOST_PASSWORD = 'yourpassword' |
邮件主题和收件人 | 设置邮件的“主题”和收件人列表。 | send_mail('Subject', 'Message', 'from@example.com', ['to@example.com'], fail_silently=False) |
示例:
以下是如何使用Django发送邮件的示例:
- 配置邮件后端:在
settings.py
中配置邮件后端和SMTP服务器信息。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.example.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'user@example.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
2.发送邮件:在视图或模型中发送邮件。
from django.core.mail import send_mail
from django.template.loader import get_template
from django.utils.html import strip_tags# 发送简单邮件
send_mail('Subject here','Here is the message.','from@example.com',['to@example.com'],fail_silently=False,
)# 使用模板发送邮件
template = get_template('emails/welcome_email.html')
context = {'name': 'xiaomifeng1010'}
message = template.render(context)
send_mail('Welcome!',strip_tags(message),'from@example.com',['to@example.com'],html_message=message,
)
3. 邮件模板:创建一个HTML邮件模板文件welcome_email.html
。
<!DOCTYPE html>
<html>
<head><title>Welcome Email</title>
</head>
<body><h1>Hello {{ name }},</h1><p>Welcome to our site!</p>
</body>
</html>
通过以上步骤,你可以在Django应用中实现邮件发送功能。邮件支持对于用户注册、密码重置、通知提醒等场景非常重要。
内容太多,分成了两部分,下一部分主要聚焦于总结Django整合多种认证方式
相关文章:
Django知识点总结
因为最近在搞一个Python项目,使用的Django框架。所以快速学习了一下这个web框架。并做一些总结。 Django官网的介绍:Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experience…...
算法(C++
题目:螺旋矩阵(59. 螺旋矩阵 II - 力扣(LeetCode)) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入&am…...
Python专题:六、循环语句(1)
补充知识 代码的注释 #描述性文字 阅读代码的人更好的理解代码 while循环语句 x<100条件控制语句,Totalx,Total自增加x,x1,x自增加1,x<100此条件满足时,执行while循环,当x101时,x101条…...
力扣2105---给植物浇水II(Java、模拟、双指针)
题目描述: Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。其中,第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是…...
Windows设置Redis为开机自启动
前言 Redis作为当前最常用的当前缓存技术,基本上Web应用中都有使用。所以,每次我们在本地启动项目前,都必须将Redis服务端启动。但是,每次都要去启动Redis就很麻烦,有没有办法做到开机自动启动Redis呢?这当…...
行业早报5.10
1.鸿蒙智行 4 月交付 29632 辆蝉联中国新势力月销冠,问界 M9 超 13000 辆; 2.三星收购胎儿超声 AI 软件公司 Sonio,巩固尖端医疗设备领域的领先地位; 3.蔚来汽车 4 月交付 15620 辆新车,同比增长 134.6%; 4…...
Java+SpringBoot+JSP实现在线心理评测与咨询系统
前言介绍 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就…...
机器学习算法应用——K近邻分类器(KNN)
K近邻分类器(KNN)(4-2) K近邻分类器(K-Nearest Neighbor,简称KNN)是一种基本的机器学习分类算法。它的工作原理是:在特征空间中,如果一个样本在特征空间中的K个最相邻的样…...
python数据分析——数据的选择和运算
数据的选择和运算 前言一、数据选择NumPy的数据选择一维数组元素提取示例 多维数组行列选择、区域选择示例 花式索引与布尔值索引布尔索引示例一示例二 花式索引示例一示例二 Pandas数据选择Series数据获取DataFrame数据获取列索引取值示例一示例二 取行方式示例loc() 方法示例…...
《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第8章 deployment
目录 前言 8.1创建和删除deployment 8.1.1通过yaml文件的方式创建deployment 8.1.2 deployment 健壮性测试...
步态识别论文(6)GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation
摘要: 视角变化导致步态外观存在显着差异。因此,识别跨视图场景中的步态是非常具有挑战性的。最近的方法要么在进行识别之前将步态从原始视图转换为目标视图,要么通过蛮力学习或解耦学习提取与相机视图无关的步态特征。然而,这些方法有许多约…...
K8S中的弹性云服务如何搭建,可能遇到的问题,如何解决!(稳啦!!!!全都稳啦!!!)
首先我们先来了解一下这玩意儿~~~ 啥是弹性云服务(Elastic Cloud Service)???? 弹性云服务(ECS)是一种基于云计算技术的虚拟服务器,由vCPU、内存、磁盘等组成的获取方便…...
新增分类——后端
实现功能: 代码开发逻辑: 页面发送ajax请求,将新增分类窗口输入的数据以json形式提交到服务端服务端Controller接收页面提交的数据并调用Service将数据进行保存Service调用Mapper操作数据库,保存数据 代码实现: Con…...
20232801 2023-2024-2 《网络攻防实践》实践九报告
20232801 2023-2024-2 《网络攻防实践》实践九报告 1.实践内容 (1)手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。 (2)利用foo函数的Bof漏洞,构造一个攻击输入字符串…...
类和对象--this引用原理
看如下代码 public class Date {public int year;public int month;public int day;public void setDate(int y, int m, int d) {year y;month m;day d;}public void printDate(){System.out.println(year "年" month "月" day "日");}…...
力扣:416. 分割等和子集(Java,动态规划:01背包问题)
目录 题目描述:示例 1:示例 2:代码实现: 题目描述: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入&#…...
Vue进阶之Vue项目实战(一)
Vue项目实战 项目搭建初始化eslint版本约束版本约束eslint配置 stylelintcspellcz-githusky给拦截举个例子 zx 项目搭建 node版本:20.11.1 pnpm版本:9.0.4 初始化 vue3最新的脚手架 pnpm create vite byelide-demo --template vue-ts pnpm i pnpm dev…...
预告 | 飞凌嵌入式邀您共聚2024上海充换电展
第三届上海国际充电桩及换电站展览会(CPSE),即将于5月22日~24日在上海汽车会展中心举行。届时,飞凌嵌入式将带来多款嵌入式核心板、开发板、充电桩TCU以及储能EMS网关产品,与来自全国的客户朋友及行业伙伴一同交流分享…...
vite 打包配置并部署到 nginx
添加配置 base:指项目在服务器上的相对路径,比如项目部署在 http://demo.dev/admin/ 上,那么你的基础路径就是 /admin/ 打包后生成的文件 部署到 nginx 访问部署地址,页面加载成功 参考文章:如何使用Vite打包和…...
ResponseHttp
文章目录 HTTP响应详解使用抓包查看响应报文协议内容 Response对象Response继承体系Response设置响应数据功能介绍Response请求重定向概述实现方式重定向特点 请求重定向和请求转发比较路径问题Response响应字符数据步骤实现 Response响应字节数据步骤实现 HTTP响应详解 使用抓…...
【题解】非对称之美(规律)
https://ac.nowcoder.com/acm/problem/214851 #include <iostream> #include <string> using namespace std; string s; int n; int fun() {// 1. 判断是否全都是相同字符bool flag false;for (int i 1; i < n; i) {if (s[i] ! s[0]){flag true;break;}}if…...
遇到如此反复的外贸客户,你可以这样做~
来源:宜选网,侵删 当你们遇到爽快的买家的时候,你是否有把握一定能把她拿下呢? 还是说即使客户很爽快,你也会耐心认真的沟通呢? 今天要和大家分享的这个买家,我本以为他是一个很爽快的买家&am…...
【数据库】简单SQL语句
已知某图书管理数据库有如下表格: 用户表user、部门表dept、角色表role、图书表book、图书分类表book_classify、图书借阅表book_borrow、还书表book_return、借阅预约表book_appoint、图书遗失表book_lose; 用户表user、部门表dept、角色表role、图书表book、图书…...
K邻算法:在风险传导中的创新应用与实践价值
01 前言 在当今工业领域,图思维方式与图数据技术的应用日益广泛,成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考,不仅促进业界爱好者之间的交流,更期望从技术层面为企业在图数…...
【小白的大模型之路】基础篇:Transformer细节
基础篇:Transformer 引言模型基础架构原论文架构图EmbeddingPostional EncodingMulti-Head AttentionLayerNormEncoderDecoder其他 引言 此文作者本身对transformer有一些基础的了解,此处主要用于记录一些关于transformer模型的细节部分用于进一步理解其具体的实现机…...
Golang | Leetcode Golang题解之第73题矩阵置零
题目: 题解: func setZeroes(matrix [][]int) {n, m : len(matrix), len(matrix[0])col0 : falsefor _, r : range matrix {if r[0] 0 {col0 true}for j : 1; j < m; j {if r[j] 0 {r[0] 0matrix[0][j] 0}}}for i : n - 1; i > 0; i-- {for …...
JMeter性能压测脚本录制
第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…...
缓存雪崩、缓存击穿、缓存穿透是什么、之间的区别及解决办法
缓存雪崩、缓存击穿、缓存穿透: 详细介绍看这篇文章,写得很好: 什么是缓存雪崩、缓存击穿、缓存穿透 下面是我自己总结的,比较简单清楚地展示了缓存雪崩、缓存击穿和缓存穿透的根本区别和相应的解决办法。强烈建议看完上述文章后…...
Pytorch张量广播
Pytorch 中的主要的数据结构包括标量、向量、矩阵、张量,同时支持数据之间的运算。在 Pytorch 中有一个张量广播的概念,就是要把小的放大,最后在一起做计算,并不是所有的张量都可以计算,规则如下 首先比较维度&#x…...
AI算法-高数2-导数定义和公式
P14 2.1 导数的定义(一):2.1 导数的定义_哔哩哔哩_bilibili 导数定义: 导数公式: P15 2.1 导数的定义(二):2.1 导数的定义(二)_哔哩哔哩_bilibili [a,b]可导,a的端点:右可导,b端点&…...
哪个网站原创文章/杭州seo公司
增加数据插入与二分查找法: /*** 描述 数组的操作* 项目名称 Java_DataStruct* 包名 com.java.array* 类名 ArrayDemo* author chenlin* date 2010年5月22日 下午3:45:49* version 1.0*/public class ArrayDemo2 {private int[] arr;// 有效数据大小private int le…...
外贸做网站要多久做好/俄罗斯搜索引擎yandex推广
原文:redis 系列26 Cluster高可用 (1)一.概述 Redis集群提供了分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。在大数据量方面的高可用方案,cluster集群比Sentinel有优势。但Redis集群并不支持处理多个keys的命令,因…...
网站开发的最后五个阶段/网站建设方案及报价
有朋友会问“为什么我的在每天晚上10点钟运行的非常缓慢?”。有经验的朋友会想到为CBO提供了自动收集数据库对象统计信息的功能,称之为“”。与之对应的Job正是在周一至周五的晚上10:00到第二天早上的6:00以及周六周日全天这个中来完成的。我们探索一下A…...
建网站空间的详细说明/seo网站推广计划
概念在Java中,对象的生命周期包括以下几个阶段:创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶段(Unreachable)收集阶段(Collected)终结阶段(Finalized)对象空间重分配阶段(De-allocated)Java对象在JVM中的生命周期当你通过new语句创建…...
wordpress单页面主题/南京seo优化
每一间店铺都应该拥有专属的品牌形象。 商家可以根据内容类型的定位,通过广告位、富文本内容、店铺信息等组件进行对店铺品牌形象的塑造,搭配底部导航栏的自定义配置,以及店铺的主题色彩风格,可更好的提升用户体验,营…...
沈阳网站建设方案模板/许昌网站推广公司
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程&#x…...