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

Django从零搭建卖家中心登陆与注册实战

在电商系统开发中,卖家中心是一个重要的组成部分,而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面,包括前端界面设计和后端逻辑实现。

一、项目概述

  1. 我们将创建一个名为seller_center的Django项目,实现卖家登陆与注册功能,包括:

    • 用户注册与登陆表单
    • 表单验证
    • 数据库存储
    • 成功提示页面
  2. Django 框架流程

    # 1. 运行 python manage.py runserver 启动开发服务器, manage.py 设置 DJANGO_SETTINGS_MODULE 环境变量并调用 Django 的命令行执行函数。
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'seller_center.settings')# 2. Django 根据 DJANGO_SETTINGS_MODULE 加载 settings.py 文件,读取项目的配置信息。
    DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database_name','USER': 'your_database_user','PASSWORD': 'your_database_password','HOST': 'your_database_host','PORT': 'your_database_port',}
    }# 3. 开发服务器加载 wsgi.py 文件,创建 WSGI 应用对象(Web 服务器网关接口)。# 4. 浏览器发送请求到 http://localhost:8000/ ,Web 服务器将请求传递给 WSGI 应用对象。# 5. WSGI 应用对象根据 settings.py 中配置的 ROOT_URLCONF 找到 urls.py 文件,根据请求的 URL 路径查找对应的视图函数。
    ROOT_URLCONF = 'seller_center.urls'# 6. 调用相应的视图函数处理请求,并将处理结果返回给客户端。 	
    eg. 注册流程从用户在 register.html 页面提交表单开始,经过 urls.py 进行路由匹配,调用 views.py 中的视图函数处理请求,使用 forms.py 进行表单验证,最后通过 models.py 将数据保存到数据库。
    

二、环境准备

首先,确保已安装Python和pip,然后准备一个requirements.txt,内容如下

# Django 框架
Django
# Django 表单美化库
django-crispy-forms
# 配合 django-crispy-forms 使用的 Bootstrap 5 样式库
crispy-bootstrap5
# Python 连接 MySQL 数据库的驱动
mysqlclient
# 用于加载环境变量的库
python-dotenv
pip install -r requirements.txt

三、创建项目

  1. 创建Django项目
django-admin startproject seller_center
cd seller_center
  1. 创建应用
python manage.py startapp users

四、设计数据模型

  1. 执行数据库迁移 :
python manage.py makemigrations
python manage.py migrate
注:可能需要对库下的表授权
  1. 在users/models.py中创建卖家模型:
from django.db import modelsclass Seller(models.Model):"""卖家模型"""id = models.BigAutoField(primary_key=True)username = models.CharField('用户名', max_length=50, unique=True)password = models.CharField('密码', max_length=100)real_name = models.CharField('真实姓名', max_length=50, null=True, blank=True)phone = models.CharField('电话', max_length=20, null=True, blank=True)email = models.CharField('邮箱', max_length=100, null=True, blank=True)status = models.IntegerField('状态', default=1, help_text='状态:0-禁用 1-启用')create_time = models.DateTimeField('创建时间', auto_now_add=True)update_time = models.DateTimeField('更新时间', auto_now=True)class Meta:app_label = 'users'managed = False,db_table = 'seller'verbose_name = '卖家'verbose_name_plural = '卖家列表'def __str__(self):return self.username
  1. 创建自定义表
CREATE TABLE `seller` (`id` bigint NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL,`password` varchar(100) NOT NULL,`real_name` varchar(50) DEFAULT NULL,`phone` varchar(20) DEFAULT NULL,`email` varchar(100) DEFAULT NULL,`status` tinyint DEFAULT '1' COMMENT '状态:0-禁用 1-启用',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

五、创建表单

  1. 在users/forms.py中创建注册表单:
from django import forms
import hashlib
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.password_validation import validate_password
from django.core.exceptions import ValidationError
from .models import Seller# 封装表单字段属性
def get_form_field_attrs(placeholder, autocomplete):return {'class': 'form-control','placeholder': placeholder,'autocomplete': autocomplete}# 创建一个基类来封装重复的字段和验证逻辑
class BaseSellerLoginForm(forms.Form):username = forms.CharField(widget=forms.TextInput(attrs=get_form_field_attrs('用户名', 'username')))password = forms.CharField(widget=forms.PasswordInput(attrs=get_form_field_attrs('密码', 'current-password')))def clean(self):cleaned_data = super().clean()username = cleaned_data.get('username')password = cleaned_data.get('password')if username and password:try:seller = Seller.objects.get(username=username)if seller.status == 0:raise forms.ValidationError('该账号已被禁用,请联系管理员')if not check_password(password, seller.password):raise forms.ValidationError('用户名或密码不正确')cleaned_data['seller'] = sellerexcept Seller.DoesNotExist:raise forms.ValidationError('用户名或密码不正确')return cleaned_data# 继承自 BaseSellerLoginForm
class SellerLoginForm(BaseSellerLoginForm):"""卖家登录表单"""def get_validated_seller(self):"""获取验证后的卖家对象,如果验证失败返回 None"""if self.is_valid(): # is_valid() 方法会触发表单类的 clean() 方法return self.cleaned_data.get('seller')return Noneclass SellerRegistrationForm(forms.ModelForm):"""卖家注册表单"""password1 = forms.CharField(label='密码',widget=forms.PasswordInput(attrs=get_form_field_attrs('请设置密码', 'new-password')),help_text='密码长度不少于8位,包含字母和数字')password2 = forms.CharField(label='确认密码',widget=forms.PasswordInput(attrs=get_form_field_attrs('请再次输入密码', 'new-password')))class Meta:model = Sellerfields = ['username', 'real_name', 'phone', 'email']widgets = {field: forms.TextInput(attrs=get_form_field_attrs(f'请输入{label}', autocomplete))for field, label, autocomplete in [('username', '用户名', 'username'),('real_name', '真实姓名', None),('phone', '手机号码', 'tel'),('email', '邮箱地址', 'email')]}labels = {'username': '用户名','real_name': '真实姓名','phone': '手机号码','email': '邮箱地址'}def clean_username(self):username = self.cleaned_data.get('username')if Seller.objects.filter(username=username).exists():raise forms.ValidationError('用户名已存在,请更换')return usernamedef clean_password2(self):password1 = self.cleaned_data.get('password1')password2 = self.cleaned_data.get('password2')if password1 and password2 and password1 != password2:raise forms.ValidationError('两次输入的密码不一致')try:validate_password(password1)except ValidationError as e:self.add_error('password1', e)return password2def save(self, commit=True):seller = super().save(commit=False)# 对密码进行哈希处理seller.password = make_password(self.cleaned_data['password1'])if commit:seller.save()return seller  # 返回 seller 实例

六、创建视图

在users/views.py中实现注册视图:

from django.shortcuts import render, redirect
from django.http import HttpResponse  # HttpResponse 仍然从 django.http 导入
from .forms import SellerRegistrationForm, SellerLoginForm
from .models import Seller
import hashlib
from django.contrib.auth.hashers import check_password
import loggingdef register_seller(request):"""卖家注册视图:param request: 请求对象:return: 渲染后的注册页面或重定向到登录页面"""if request.method == 'POST':form = SellerRegistrationForm(request.POST)if form.is_valid():# 创建新的卖家账号seller = form.save(commit=True)return redirect('login_seller')else:# 处理表单验证失败的情况print(form.errors)  # 打印表单错误信息else:form = SellerRegistrationForm()return render(request, 'users/register.html', {'form': form})# 配置日志记录
logger = logging.getLogger(__name__)def login_seller(request):"""卖家登录视图:param request: 请求对象:return: 渲染后的登录页面或重定向到订单列表页面"""if request.method == 'POST':# 简化表单验证和获取卖家对象的逻辑if (seller := SellerLoginForm(request.POST).get_validated_seller()):# 登录成功,设置 cookieresponse = redirect('base_page')response.set_cookie('seller_id', seller.id, max_age=3600 * 24 * 7)return responseelse:# 表单验证失败form = SellerLoginForm(request.POST)logger.error(f"表单验证失败: {form.errors}")# 将错误信息传递到模板return render(request, 'users/login.html', {'form': form})else:form = SellerLoginForm()return render(request, 'users/login.html', {'form': form})def base_page_view(request):return render(request, 'base.html')

七、配置URL

  1. 修改seller_center/urls.py:
from django.urls import path, include
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirectdef home_view(request):return HttpResponseRedirect('/users/login/')urlpatterns = [# 映射空路径到主页视图函数,命名为homepath('', home_view, name='home'),# 修改登录路由,指向 users 应用的 urls.py 文件path('users/', include('users.urls')),
]
  1. 创建users/urls.py:
from django.urls import path
from .views import register_seller, login_seller, base_page_viewurlpatterns = [path('register/', register_seller, name='register_seller'),path('login/', login_seller, name='login_seller'),path('base/', base_page_view, name='base_page'),
]

八、创建模板

  1. 创建基础模板
    首先在项目根目录创建templates文件夹,并在settings.py中配置:
import os # 导入 os 模块,用于与操作系统进行交互,例如文件路径操作
...TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],  # 添加这一行'APP_DIRS': True,# ...其他配置...},
]
  1. 创建templates/base.html:
{% load static %}
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><title>{% block title %}卖家中心{% endblock %}</title><style>body {background-color: #f8f9fa;}.container {max-width: 2500px;margin: 80px auto;padding: 30px;background-color: #fff;border-radius: 10px;box-shadow: 0 0 15px rgba(0,0,0,0.1);}.title {text-align: center;margin-bottom: 30px;color: #333;}.form-group {margin-bottom: 20px;}.btn-action {width: 100%;padding: 10px;border: none;}.link {text-align: center;margin-top: 20px;}</style>
</head>
<body><div class="container">欢迎来到卖家中心!{% block content %}<!-- 页面内容将在这里填充 -->{% endblock %}</div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
  1. 创建注册页面
    创建templates/users/register.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>卖家注册</title><!-- Bootstrap 5 CSS --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><!-- Bootstrap Icons --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css"><style>body {background-color: #f8f9fa;height: 100vh;display: flex;align-items: center;justify-content: center;}/* 统一容器样式,与登录页面保持一致 */.register-container {max-width: 420px; /* 修改为与登录页面一致的宽度 */width: 100%;padding: 30px;background-color: #fff;border-radius: 10px;box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);}.register-header {text-align: center;margin-bottom: 30px;}.register-header h1 {font-size: 28px;font-weight: 600;color: #344767;}.register-header .icon {font-size: 48px;/* 修改颜色与登录页面风格协调 */color: #5e72e4; margin-bottom: 15px;}.form-control {padding: 12px 15px;border-radius: 8px;}.form-control:focus {/* 修改聚焦颜色与登录页面一致 */border-color: #5e72e4; box-shadow: 0 0 0 0.25rem rgba(94, 114, 228, 0.25);}/* 修改按钮样式与登录页面一致 */.btn-primary { background-color: #5e72e4;border-color: #5e72e4;padding: 12px 15px;font-weight: 600;border-radius: 8px;width: 100%;}.btn-primary:hover {background-color: #4a5cd1;border-color: #4a5cd1;}.login-link {text-align: center;margin-top: 20px;color: #6c757d;}.login-link a {/* 修改链接颜色与登录页面一致 */color: #5e72e4; text-decoration: none;font-weight: 600;}.login-link a:hover {text-decoration: underline;}.errorlist {color: #dc3545;list-style-type: none;padding-left: 0;margin-bottom: 10px;font-size: 14px;}</style>
</head>
<body><div class="container"><div class="row justify-content-center"><div class="col-md-6 col-lg-5"><div class="register-container"><div class="register-header"><div class="icon"><i class="bi bi-person-plus"></i></div><h1>注册卖家账号</h1><p class="text-muted">创建账号以开始使用卖家中心</p></div><form method="post" class="needs-validation" novalidate>{% csrf_token %}<div class="row">{% for field in form %}<div class="{% if field.name == 'password1' or field.name == 'password2' %}col-12{% else %}col-md-6{% endif %} mb-3"><label for="{{ field.id_for_label }}" class="form-label">{{ field.label }}</label>{{ field.errors }}{{ field }}{% if field.help_text %}<div class="form-text">{{ field.help_text }}</div>{% endif %}</div>{% endfor %}</div><div class="mb-3"><button type="submit" class="btn btn-primary"><i class="bi bi-check-circle me-2"></i>注册</button></div></form><div class="login-link"><p>已有账号?<a href="{% url 'login_seller' %}">点击登录</a></p></div></div></div></div></div><!-- Bootstrap 5 JS Bundle with Popper --><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script><script>// 为表单字段添加Bootstrap的form-control类document.addEventListener('DOMContentLoaded', function() {var inputs = document.querySelectorAll('input, select, textarea');inputs.forEach(function(input) {input.classList.add('form-control');});});</script>
</body>
</html>
  1. 创建登陆页面
    创建templates/users/login.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>卖家登录</title><!-- Bootstrap 5 CSS --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><!-- Bootstrap Icons --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css"><style>body {background-color: #f8f9fa;height: 100vh;display: flex;align-items: center;justify-content: center;}.login-container {max-width: 420px;width: 100%;padding: 30px;background-color: #fff;border-radius: 10px;box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);}.login-header {text-align: center;margin-bottom: 30px;}.login-header h1 {font-size: 28px;font-weight: 600;color: #344767;}.login-header .icon {font-size: 48px;color: #5e72e4;margin-bottom: 15px;}.form-control {padding: 12px 15px;border-radius: 8px;}.form-control:focus {border-color: #5e72e4;box-shadow: 0 0 0 0.25rem rgba(94, 114, 228, 0.25);}.btn-primary {background-color: #5e72e4;border-color: #5e72e4;padding: 12px 15px;font-weight: 600;border-radius: 8px;width: 100%;}.btn-primary:hover {background-color: #4a5cd1;border-color: #4a5cd1;}.register-link {text-align: center;margin-top: 20px;color: #6c757d;}.register-link a {color: #5e72e4;text-decoration: none;font-weight: 600;}.register-link a:hover {text-decoration: underline;}.errorlist {color: #dc3545;list-style-type: none;padding-left: 0;margin-bottom: 10px;font-size: 14px;}</style>
</head>
<body><div class="container"><div class="row justify-content-center"><div class="col-md-6 col-lg-5"><div class="login-container"><div class="login-header"><div class="icon"><i class="bi bi-shop"></i></div><h1>卖家中心</h1><p class="text-muted">请登录您的账号以继续</p></div><form method="post" class="needs-validation" novalidate>{% csrf_token %}{% for field in form %}<div class="mb-3"><label for="{{ field.id_for_label }}" class="form-label">{{ field.label }}</label>{{ field.errors }} <!-- 显示字段级别的错误信息 -->{{ field }}{% if field.help_text %}<div class="form-text">{{ field.help_text }}</div>{% endif %}</div>{% endfor %}<!-- 显示非字段级别的错误信息 -->{% if form.non_field_errors %}<div class="errorlist">{{ form.non_field_errors }}</div>{% endif %}<div class="mb-3"><button type="submit" class="btn btn-primary"><i class="bi bi-box-arrow-in-right me-2"></i>登录</button></div></form><div class="register-link"><p>还没有账号?<a href="{% url 'register_seller' %}">点击注册</a></p></div></div></div></div></div><!-- Bootstrap 5 JS Bundle with Popper --><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script><script>// 为表单字段添加Bootstrap的form-control类document.addEventListener('DOMContentLoaded', function() {var inputs = document.querySelectorAll('input, select, textarea');inputs.forEach(function(input) {input.classList.add('form-control');});});</script>
</body>
</html>

十、运行项目

python manage.py runserver

打开浏览器访问 http://localhost:8000
在这里插入图片描述
在这里插入图片描述

十一、效果展示

登陆成功
在这里插入图片描述

相关文章:

Django从零搭建卖家中心登陆与注册实战

在电商系统开发中&#xff0c;卖家中心是一个重要的组成部分&#xff0c;而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面&#xff0c;包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...

MySQL表的使用(4)

首先回顾一下之前所学的增删查改&#xff0c;这些覆盖了平时使用的80% 我们上节课中学习到了MySQL的约束 其中Primary key 是主键约束&#xff0c;我们今天要学习的是外键约束 插入一个表 外键约束 父表 子表 这条记录中classid为5时候&#xff0c;不能插入&#xff1b; 删除…...

ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别

文章目录 省流结论机器配置不同量化模型占用显存1. 创建虚拟环境2. 创建测试jsonl文件3. 新建测试脚本3. 默认加载方式&#xff0c;单卡运行模型3.1 7b模型输出213 tok/s3.1 32b模型输出81 tok/s3.1 70b模型输出43tok/s 4. 使用负载均衡&#xff0c;多卡运行4.1 7b模型输出217t…...

深入定制 QSlider——实现精准点击跳转与拖拽区分

在使用 Qt 编写界面应用时,QSlider 是一个常用的滑动控件。但你可能会注意到,默认情况下点击滑轨(groove)区域时,滑块并不会直接跳到鼠标点击的位置,而是按照内部的分页步进(page step)行为响应。此外,垂直 Slider 在点击最底部时还存在 releaseEvent(或 sliderRelea…...

Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)

前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划&#xff0c;今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...

Java Spring Cloud框架使用及常见问题

Spring Cloud作为基于Spring Boot的分布式微服务框架&#xff0c;显著简化了微服务架构的开发与管理。其核心优势包括集成Eureka、Ribbon、Hystrix等组件&#xff0c;提供一站式服务发现、负载均衡、熔断容错等解决方案&#xff0c;支持动态配置与消息总线&#xff0c;实现高效…...

[连载]Transformer架构详解

Transformer: Attention Is All You Need Paper 地址&#xff1a;https://arxiv.org/abs/1706.03762 Paper 代码&#xff1a;https://github.com/tensorflow/tensor2tensor Paper 作者&#xff1a;Ashish Vaswani,Noam Shazeer,Niki Parmar,Jakob Uszkoreit,Llion Jones,Aidan…...

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战

DeepSeek&#xff1a;穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组&#xff08;人机协同创作&#xff09; 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示&#xff0c;百度搜索结果前10页中&#xff0c;61.7%的内容存在"伪专业化"现象——看似…...

AF3 generate_chain_data_cache脚本解读

AlphaFold3 generate_chain_data_cache 脚本在源代码的scripts文件夹下。该脚本从指定目录中批量解析 mmCIF/PDB 文件的工具,并将每个链的基本信息(序列、分辨率、是否属于聚类等)提取并写入 JSON 文件,主要用于后续蛋白质建模、过滤或训练数据准备。 源代码: import ar…...

LVGL Video控件和Radiobtn控件详解

LVGL Video控件和Radiobtn控件详解 一、 Video控件详解1. 概述2. 创建和初始化3. 基本属性设置4. 视频控制5. 回调函数6. 高级功能7. 注意事项 二、Radiobtn控件详解1. 概述2. 创建和初始化3. 属性设置4. 状态控制5. 组管理6. 事件处理7. 样式设置8. 注意事项 三、效果展示四、…...

组合数哭唧唧

前言&#xff1a;手写一个简单的组合数&#xff0c;但是由于长期没写&#xff0c;导致一些细节没处理好 题目链接 #include<bits/stdc.h> using namespace std; #define endl "\n"#define int long longconst int N (int)2e510; const int Mod (int)1e97;int…...

NLP高频面试题(四十二)——RAG系统评估:方法、指标与实践指南

1. 引言:RAG系统概述与评估挑战 检索增强生成(Retrieval-Augmented Generation,简称 RAG)是近年来自然语言处理领域的一个重要进展。RAG系统在大型语言模型生成文本的过程中引入了外部检索模块,从外部知识库获取相关信息,以缓解纯生成模型可能出现的幻觉和知识盲点。通过…...

MySQL-COUNT函数使用

COUNT聚合函数 COUNT 是 MySQL 中一个常用的聚合函数&#xff0c;用于统计满足条件的行数。有3种使用方式&#xff1a; COUNT(*)&#xff1a;统计表中所有行的数量&#xff0c;包括 NULL 值。COUNT(字段)&#xff1a;统计指定字段非 NULL 值的行数。COUNT(条件查询)&#xff…...

Linux路漫漫

目录 Vim模式 基本操作 文本编辑 更多功能 1. 直接启动 Vim 2. 打开一个已存在的文件 3. 打开多个文件 4. 以只读模式打开文件 5. 从指定行号开始编辑 6. 快速打开并执行命令 7. 检查是否安装了 Vim 8. 退出 Vim 前提条件 SCP 命令格式 具体操作 1. Windows 命…...

游戏引擎学习第227天

今天的计划 今天的工作重点是进行吸引模式&#xff08;attract mode&#xff09;的开发&#xff0c;主要是处理游戏的进出和其他一些小的细节问题&#xff0c;这些是之前想要整理和清理的部分。我做了一些工作&#xff0c;将游戏代码中的不同部分分离到逻辑上独立的区域&#…...

一键直达:用n8n打造谷歌邮箱到Telegram的实时通知流

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 一键直达&#xff1a;用n8n打造谷歌邮箱到Telegram的实时通知流 前言n8n的强大之处实现简便性实战…...

【QT】 QT定时器的使用

QT定时器的使用 1. QTimer介绍&#xff08;1&#xff09;QTimer的使用方法步骤示例代码1&#xff1a;定时器的启动和关闭现象&#xff1a;示例代码2&#xff1a;定时器每隔1s在标签上切换图片现象&#xff1a; (2)实际开发的作用 2.日期 QDate(1)主要方法 3.时间 QTime(1)主要方…...

深入解析分类模型评估指标:ROC曲线、AUC值、F1分数与分类报告

标题&#xff1a;深入解析分类模型评估指标&#xff1a;ROC曲线、AUC值、F1分数与分类报告 摘要&#xff1a; 在机器学习中&#xff0c;评估分类模型的性能是至关重要的一步。本文详细介绍了四个核心评估指标&#xff1a;ROC曲线、AUC值、F1分数和分类报告。通过对比这些指标…...

【自动化测试】如何获取cookie,跳过登录的简单操作

前言 &#x1f31f;&#x1f31f;本期讲解关于自动化测试函数相关知识介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话…...

每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建

本文重点 RNN Cell(循环神经网络单元)是循环神经网络(RNN)的核心组成部分,用于处理序列数据中的每个时间步,并维护隐藏状态以捕获序列中的时间依赖关系。 RNN CELL的结构 RNN是一个循环结构,它可以看作是RNN CELL的循环,RNN CELL的结构如下图所示,RNN CELL不断进行…...

【AI提示词】业务开发经理

提示说明 业务开发经理旨在帮助用户构建一个高效、有洞察力的业务发展角色&#xff0c;能够在竞争激烈的市场中寻找并抓住商机。 提示词 # 角色 业务开发经理专家## 注意 - 业务开发经理应具备强烈的市场洞察力和人际沟通能力。 - 专家设计应考虑业务发展的实际需求和挑战。…...

【基于开源insightface的人脸检测,人脸识别初步测试】

简介 InsightFace是一个基于深度学习的开源人脸识别项目,由蚂蚁金服的深度学习团队开发。该项目提供了人脸检测、人脸特征提取、人脸识别等功能,支持多种操作系统和深度学习框架。本文将详细介绍如何在Ubuntu系统上安装和实战InsightFace项目。 目前github有非常多的人脸识…...

进程(完)

今天我们就补充一个小的知识点,查看进程树命令,来结束我们对linux进程的学习,那么话不多说,来看. 查看进程树 pstree 基本语法&#xff1a; pstree [选项] 优点&#xff1a;可以更加直观的来查看进程信息 常用选项&#xff1a; -p&#xff1a;显示进程的pid -u&#xff…...

Linux的网络配置的资料

目前有两种方式&#xff0c;network和NetworkManager。 network方式是在CentOS 6及更早版本中引入的配置方法&#xff0c;支持使用配置文件的方式管理网卡的配置。 NetworkManager是在CentOS 7及后续的版本中使用的配置方法&#xff0c;支持使用命令行和图形化界面的方式来管理…...

C/C++运算

C语言字符串的比较 #include <string.h> int strcmp( const char *str1, const char *str2 );例如: int ret; ret strcmp(str1, str2);返回值&#xff1a; str1 < str2时&#xff0c; 返回值< 0&#xff08;有些编译器返回 -1&#xff09; str1 > str2时…...

【控制学】控制学分类

【控制学】控制学分类 文章目录 [TOC](文章目录) 前言一、工程控制论1. 经典控制理论2. 现代控制理论 二、生物控制论三、经济控制论总结 前言 控制学是物理、数学与工程的桥梁 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、工程控制论 1. 经典…...

AOSP14 Launcher3——最近任务TaskViewSimulator详解

前言&#xff1a;TaskViewSimulator 这个类在最近任务中起到了一个非常重要的作用。 从字面意思上理解&#xff0c;这个单词是由TaskViewSimulator组合而来&#xff0c;字面意思就是TaskView的模拟器&#xff0c;顾名思义&#xff0c;就是一个用来模拟TaskView的类。 为什么要模…...

软考中级-软件设计师 2022年上半年下午题真题解析:通关秘籍+避坑指南

&#x1f4da; 目录&#xff08;快速跳转&#xff09; 大题&#xff08;下午题&#xff09;&#xff08;每题15分&#xff0c;共75分&#xff09;一、结构化分析与设计&#x1f354; 试题一&#xff1a;外卖订餐系统 二、数据库应用分析与设计&#x1f697; 试题二&#xff1a;…...

波束形成(BF)从算法仿真到工程源码实现-第十节-非线性波束形成

一、概述 本节我们基于webrtc的非线性波束形成进行代码仿真&#xff0c;并对仿真结果进行展示和分析总结。更多资料和代码可以进入https://t.zsxq.com/qgmoN &#xff0c;同时欢迎大家提出宝贵的建议&#xff0c;以共同探讨学习。 二、仿真代码 2.1 常量参数 % *author : a…...

《忘尘谷》音阶与调性解析

一、音高与音名的对应关系 根据搜索结果及音乐理论&#xff0c;结合《忘尘谷》的曲谱信息&#xff0c;其音阶与调性分析如下&#xff1a; 调性判定 原曲调性为 D调&#xff08;原曲标注为D调&#xff09;&#xff0c;但曲谱编配时采用 C调指法&#xff0c;通过变调夹夹2品&…...