https://ciang.top/ https://ciang.top/
首页
  • 首页
  • python
  • 工具经验
  • 教程
  • c++
  • mysql
  • 登录
搜索历史 清空
写文章

登录

账号密码登录
扫码登录
扫码登录
请使用手机扫码登录
注册登录即表示同意用户协议和隐私政策
编程
思路/心得
传奇私服-V8M2引擎学习笔记
教程
翻译
游戏
java c/c++ mysql python excel html/css/js 工具经验
推荐 最新
C++将不同编码的字符串写入文件
benojan 2025-4-5

C++将不同编码的字符串写入文件

u8string 以文本模式进行保存 #include <fstream> #include <iostream> int main() { std::u8string u8str = u8"你好𣍐,世界!This is a UTF-8 string."; const char* filename = "output_u8.txt"; std::ofstream outfile(filename); // 默认以文本模式打开 if (outfile.is_open()) { outfile << reinterpret_cast<const char*>(u8str.c_str()); outfile.close(); std::cout << "std::u8string 已写入文件 " << filename << " (UTF-8)." << std::endl; } else { std::cerr << "无法打开文件 " << filename << std::endl; return 1; } return 0; } 以二进制模式进行保存 #include <fstream> #include <iostream> int main() { std::u8string u8str = u8"你好𣍐,世界!This is a UTF-8 string."; const char* filename = "output_u8.txt"; std::ofstream outfile(filename, std::ios::binary); // 以二进制模式打开 if (outfile.is_open()) { outfile.write(reinterpret_cast<const char*>(u8str.c_str()), u8str.length() * sizeof(char8_t)); outfile.close(); std::cout << "std::u8string 已写入文件 " << filename << " (UTF-8)." << std::endl; } else { std::cerr << "无法打开文件 " << filename << std::endl; return 1; } return 0; } u16string 以UTF-16 Little-Endian进行保存 #include <fstream> #include <iostream> int main() { std::u16string u16str = u"你好𣍐,世界!This is a test."; const char* filename = "output_u16le.txt"; std::ofstream outfile(filename, std::ios::binary); if (outfile.is_open()) { // 写入 UTF-16 Little-Endian BOM unsigned char bom[] = { 0xFF, 0xFE }; outfile.write(reinterpret_cast<const char*>(bom), sizeof(bom)); // 将 std::u16string 的数据作为原始字节写入 outfile.write(reinterpret_cast<const char*>(u16str.c_str()), u16str.length() * sizeof(char16_t)); outfile.close(); std::cout << "std::u16string 已写入文件 " << filename << " (UTF-16 Little-Endian)." << std::endl; } else { std::cerr << "无法打开文件 " << filename << std::endl; return 1; } return 0; } 以UTF-16 Big-Endian进行保存 #include <fstream> #include <iostream> #include <vector> int main() { std::u16string u16str = u"你好𣍐,世界!This is a test."; const char* filename = "output_u16be.txt"; std::ofstream outfile(filename, std::ios::binary); if (outfile.is_open()) { // 写入 UTF-16 Big-Endian BOM unsigned char bom[] = { 0xFE, 0xFF }; outfile.write(reinterpret_cast<const char*>(bom), sizeof(bom)); // 将 std::u16string 的数据作为原始字节写入 (需要字节序转换) std::vector<char> buffer(u16str.length() * sizeof(char16_t)); std::memcpy(buffer.data(), u16str.c_str(), buffer.size()); // 交换每两个字节的顺序以实现 Big-Endian for (size_t i = 0; i < buffer.size(); i += 2) { std::swap(buffer[i], buffer[i + 1]); } outfile.write(buffer.data(), buffer.size()); outfile.close(); std::cout << "std::u16string 已写入文件 " << filename << " (UTF-16 Big-Endian)." << std::endl; } else { std::cerr << "无法打开文件 " << filename << std::endl; return 1; } return 0; }

214 27 0
编码
C++类的虚函数继承 && Java类的方法重写
benojan 2025-3-24

C++类的虚函数继承 && Java类的方法重写

C++的虚函数virtual #include <iostream> using namespace std; class Father { public: virtual void hello() { cout << "father"; } }; class Son : public Father { public: void hello() { cout << "son"; } }; int main() { Father* f = new Son(); // 如果Father类不写virtual,则结果为father f->hello(); // son } Java的类方法重写 public class Father { public void hello() { System.out.println("father"); } } public class Son { public void hello() { System.out.println("son"); } } import java.util.ArrayList; public class Main { public static void main(String[] args) { Father f = new Son(); f.hello() // son } }

197 27 0
虚函数继承重写
Java Spring Boot 入门教程
benojan 2025-3-18

Java Spring Boot 入门教程

Java Spring Boot 入门教程 Spring Boot 是一个基于 Spring 框架的快速开发框架,旨在简化 Spring 应用的初始搭建和开发过程。它通过自动配置和约定优于配置的原则,让开发者能够快速构建独立、生产级别的应用。以下是 Spring Boot 的入门教程,涵盖核心知识点和代码实操。 1. Spring Boot 简介 Spring Boot 是 Spring 框架的扩展,提供了以下核心特性: 自动配置:根据项目依赖自动配置 Spring 应用。 独立运行:内置 Tomcat、Jetty 等服务器,无需部署 WAR 文件。 生产就绪:提供健康检查、指标监控等生产环境支持。 简化依赖管理:通过spring-boot-starter简化依赖配置。 2. 环境准备 JDK:确保安装 JDK 8 或更高版本。 Maven/Gradle:推荐使用 Maven 或 Gradle 作为构建工具。 IDE:推荐使用 IntelliJ IDEA 或 Eclipse。 3. 创建 Spring Boot 项目 使用 Spring Initializr 快速生成项目: 选择 Maven/Gradle 项目。 添加依赖(如Spring Web、Spring Data JPA等)。 下载并解压项目,导入到 IDE 中。 4. 核心知识点与代码实操 4.1 项目结构 src/main/java └── com.example.demo ├── DemoApplication.java // 主启动类 ├── controller // 控制器层 ├── service // 服务层 └── repository // 数据访问层 src/main/resources ├── application.properties // 配置文件 └── static // 静态资源 4.2 主启动类 package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 4.3 控制器层 package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello, Spring Boot!"; } } 4.4 配置文件 在 application.properties 中配置应用属性: server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 4.5 数据访问层(Spring Data JPA) package com.example.demo.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.demo.entity.User; public interface UserRepository extends JpaRepository<User, Long> { } 4.6 服务层 package com.example.demo.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.example.demo.repository.UserRepository; import com.example.demo.entity.User; @Service public class UserService { @Autowired private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } } 5. 运行与测试 运行 DemoApplication 启动应用。 访问 http://localhost:8080/hello,查看返回的 "Hello, Spring Boot!"。 使用 Postman 或浏览器测试其他 API。 6. 进阶学习 Spring Boot Actuator:监控和管理应用。 Spring Security:实现安全认证和授权。 Spring Cloud:构建微服务架构。 通过以上教程,你可以快速入门 Spring Boot 并掌握其核心功能。如果需要更深入的学习,可以参考官方文档或相关书籍。

248 27 0
javaspringboot
Windows查看已连接的无线网络密码
benojan 2025-2-21

Windows查看已连接的无线网络密码

在Windows电脑上 通过网络和共享中心: 右键单击任务栏上的网络图标,选择“打开网络和共享中心”。 点击当前连接的Wi-Fi网络名称。 在弹出的窗口中,点击“无线属性”。 切换到“安全”选项卡,勾选“显示字符”复选框,即可看到密码。 通过命令提示符: 按下Win + R键,输入cmd并回车,打开命令提示符。 输入以下命令并回车:netsh wlan show profiles 这会显示所有连接过的Wi-Fi名称。 输入以下命令并回车,将"Wi-Fi名称"替换为你想要查看的Wi-Fi名称: netsh wlan show profile name="Wi-Fi名称" key=clear 在输出的信息中,找到“安全设置”部分,"关键内容"一栏即为密码。

255 27 0
node.js的模块系统
benojan 2025-2-13

node.js的模块系统

一、使用ECMAScript Modules标准规范 ECMAScript Modules (ESM) 是 JavaScript 官方的标准模块系统。 使用方式 推荐使用.mjs后缀 配置package.json { 'type': 'module' } 默认导出/导入 export default function greet(name) { return `Hello, ${name}!`; } // 或者 const greet = function(name) { return `Hello, ${name}!`; }; export default greet; import greet from './myModule.mjs'; # greet可更换成任意名字 console.log(greet("World")); 命名导出/导入 export const PI = 3.14159; export function add(a, b) { return a + b; } export class MyClass { constructor(name) { this.name = name; } } // 或者 const PI = 3.14159; function add(a, b) { return a + b; } class MyClass { constructor(name) { this.name = name; } } export {PI, add, MyClass} import { PI, add, MyClass } from './myModule.mjs'; console.log(PI); console.log(add(2, 3)); const myInstance = new MyClass("Example"); console.log(myInstance.name); 命名导出/导入使用别名 let veryLongVariableName = 42; export { veryLongVariableName as answer }; import { answer as aa } from './myModule.mjs'; 命名导入使用命名空间 import * as myModule from './myModule.mjs'; console.log(myModule.PI); console.log(myModule.add(2, 3)); 二、使用CommonJS规范 CommonJS规范是node.js的默认方式。 导出 const greet = function(name) { return `Hello, ${name}!`; }; module.exports.greet = greet; // 或者 exports.greet = greet; 导入 const mod = require("./myModule.js"); console.log(mod.greet);

302 27 0
nodejs
django之主路由包含子路由
benojan 2025-2-6

django之主路由包含子路由

假设你的drf项目中有一个名为api的app 在 app 中创建 urls.py 文件 在api文件夹中,创建一个名为urls.py的文件。 from django.urls import path from . import views urlpatterns = [ path('index/', views.index, name='index'), ] drf的项目文件夹的urls.py文件 from django.urls import include, path urlpatterns = [ path('api/', include('api.urls')), ]

273 27 0
django
django之DRF的views.py实现方式概览
benojan 2025-1-31

django之DRF的views.py实现方式概览

Django 的视图实现方式主要有两种:FBA(Function-Based Views,函数视图) 和 CBA(Class-Based Views,类视图)。 而在 Django REST Framework(DRF)中,视图的实现方式更加丰富和灵活,主要包括以下几种: 1. Django 的视图实现方式 (1) FBA(Function-Based Views) 函数视图是基于函数的视图,适合简单的逻辑处理。 from django.http import HttpResponse def my_view(request): if request.method == 'GET': return HttpResponse('Hello, GET request!') elif request.method == 'POST': return HttpResponse('Hello, POST request!') (2) CBA(Class-Based Views) 类视图是基于类的视图,适合复杂的逻辑处理,支持代码复用和扩展。 from django.views import View from django.http import HttpResponse class MyView(View): def get(self, request): return HttpResponse('Hello, GET request!') def post(self, request): return HttpResponse('Hello, POST request!') 2. DRF 的视图实现方式 DRF 在 Django 的基础上提供了更强大的视图实现方式,主要用于构建 RESTful API。以下是 DRF 中常见的视图实现方式: (1) APIView APIView 是 DRF 中最基础的类视图,类似于 Django 的 View,但提供了更多的功能(如请求解析、响应渲染、异常处理等)。 from rest_framework.views import APIView from rest_framework.response import Response class MyAPIView(APIView): def get(self, request): return Response({'message': 'Hello, GET request!'}) def post(self, request): return Response({'message': 'Hello, POST request!'}) (2) GenericAPIView GenericAPIView 是 APIView 的扩展,提供了更多的通用功能(如获取单个对象、获取对象列表等),通常与 Mixin 类一起使用。 from rest_framework.generics import GenericAPIView from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from .models import MyModel from .serializers import MyModelSerializer class MyGenericView(ListModelMixin, RetrieveModelMixin, GenericAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) (3) ViewSet ViewSet 是 DRF 中更高级的视图实现方式,它将多个视图逻辑(如列表、详情、创建、更新、删除等)组合到一个类中。ViewSet 通常与路由器(Router)一起使用,自动生成 URL 配置。 ModelViewSet ModelViewSet 是 ViewSet 的子类,提供了完整的 CRUD 操作。 from rest_framework.viewsets import ModelViewSet from .models import MyModel from .serializers import MyModelSerializer class MyModelViewSet(ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer ReadOnlyModelViewSet ReadOnlyModelViewSet 是 ModelViewSet 的子类,只提供只读操作(列表和详情)。 from rest_framework.viewsets import ReadOnlyModelViewSet from .models import MyModel from .serializers import MyModelSerializer class MyReadOnlyViewSet(ReadOnlyModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer 自定义 ViewSet 你可以通过继承 ViewSet 或 GenericViewSet 来实现自定义逻辑。 from rest_framework.viewsets import ViewSet from rest_framework.response import Response class MyCustomViewSet(ViewSet): def list(self, request): return Response({'message': 'Hello, list action!'}) def retrieve(self, request, pk=None): return Response({'message': f'Hello, retrieve action for pk={pk}!'}) (4) 路由器(Router) DRF 提供了路由器(Router)来自动生成 ViewSet 的 URL 配置。 from rest_framework.routers import DefaultRouter from .views import MyModelViewSet router = DefaultRouter() router.register(r'mymodels', MyModelViewSet) urlpatterns = router.urls 3. 推荐使用哪种方式? (1) 简单场景 如果逻辑简单,可以直接使用 APIView 或函数视图。 (2) 标准 CRUD 操作 如果需要对模型进行标准的 CRUD 操作,推荐使用 ModelViewSet,因为它可以快速生成完整的 API。 (3) 复杂逻辑 如果需要自定义逻辑,可以使用 ViewSet 或 GenericAPIView,结合 Mixin 类实现灵活的功能。 (4) 只读 API 如果只需要提供只读 API,可以使用 ReadOnlyModelViewSet。 (5) 代码复用 如果需要复用代码,推荐使用 GenericAPIView 和 Mixin 类。 4. ViewSet 的优势 代码简洁:将多个视图逻辑组合到一个类中,减少代码量。 自动 URL 配置:通过路由器自动生成 URL 配置,减少手动配置的工作量。 标准化:提供标准的 CRUD 操作,适合快速开发 RESTful API。

337 27 0
djangopythondrf
django之装饰器的介绍
benojan 2025-1-31

django之装饰器的介绍

1. @method_decorator 的作用 @method_decorator 是 Django 提供的一个工具,用于将普通的函数装饰器应用到类视图的方法上。因为类视图的方法(如 get、post、dispatch 等)是实例方法,而不是普通函数,直接使用函数装饰器会报错。@method_decorator 的作用就是解决这个问题。 示例: from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt @method_decorator(csrf_exempt, name='post') class Login(View): def post(self, request): return HttpResponse('Hello Post') 在这个例子中,csrf_exempt 是一个函数装饰器,通常用于函数视图。通过 @method_decorator,我们将 csrf_exempt 应用到 Login 类的 post 方法上。 2. 使用 @method_decorator 的好处 (1) 复用函数装饰器 Django 提供了许多有用的函数装饰器(如 csrf_exempt、login_required、permission_required 等),这些装饰器原本是为函数视图设计的。通过 @method_decorator,可以在类视图中复用这些装饰器,而不需要重写逻辑。 (2) 简化代码 如果不使用 @method_decorator,你可能需要手动重写 dispatch 方法来实现装饰器的功能。例如: class Login(View): def dispatch(self, request, *args, **kwargs): # 手动实现 csrf_exempt 的逻辑 return super().dispatch(request, *args, **kwargs) 而使用 @method_decorator 可以更简洁地实现相同的功能。 (3) 灵活性 @method_decorator 可以应用到类视图的特定方法上(如 get、post 等),也可以应用到整个类上(通过 name='dispatch')。这种灵活性使得你可以根据需要选择性地装饰方法。 3. @method_decorator 的注意事项 (1) 装饰器的顺序 如果同时使用多个装饰器,需要注意装饰器的顺序。例如: @method_decorator(login_required, name='dispatch') @method_decorator(csrf_exempt, name='dispatch') class Login(View): pass 在这个例子中,csrf_exempt 会先生效,然后是 login_required。 (2) 应用到特定方法 如果只需要装饰某个特定的方法(如 get 或 post),可以直接将装饰器应用到该方法上: class Login(View): @method_decorator(csrf_exempt) def post(self, request): return HttpResponse('Hello Post') (3) 避免重复装饰 如果多个方法需要相同的装饰器,可以将装饰器应用到 dispatch 方法上,因为 dispatch 是所有请求的入口点。这样可以避免重复装饰。 4. @method_decorator 的替代方案 如果你不想使用 @method_decorator,也可以直接在 dispatch 方法中调用装饰器的逻辑。例如: from django.views.decorators.csrf import csrf_exempt class Login(View): @csrf_exempt def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs) 这种方式与 @method_decorator 的效果相同,但代码更直接。 5. 总结 @method_decorator 的作用是将函数装饰器应用到类视图的方法上,dispatch 方法的名称不会改变。 使用 @method_decorator 的好处包括复用函数装饰器、简化代码和增加灵活性。 在实际开发中,@method_decorator 是处理类视图装饰器的推荐方式,尤其是在需要复用 Django 内置装饰器时。 如果是为了 API 开发,建议使用 Django REST Framework(DRF),它提供了更安全的认证机制(如:Token认证、JWT认证),而不需要禁用 CSRF。

315 27 0
django之DRF框架搭建API项目的步骤
benojan 2025-1-31

django之DRF框架搭建API项目的步骤

创建虚拟环境并安装必要的包 参考:python虚拟环境 创建 Django 项目和应用 django-admin startproject myproject cd myproject python manage.py startapp myapp 在 settings.py 中进行基础配置 NSTALLED_APPS = [ # ... 现有应用 ... 'rest_framework', 'myapp', ] # DRF 配置 REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication' ], } 创建模型 根据需要自行创建 from django.db import models class Item(models.Model): name = models.CharField(max_length=100) description = models.TextField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name 创建模型的序列化器 from rest_framework import serializers from .models import Item class ItemSerializer(serializers.ModelSerializer): class Meta: model = Item fields = '__all__' 创建视图 from rest_framework import viewsets from .models import Item from .serializers import ItemSerializer class ItemViewSet(viewsets.ModelViewSet): queryset = Item.objects.all() serializer_class = ItemSerializer 配置URL from django.contrib import admin from django.urls import path, include from rest_framework.routers import DefaultRouter from myapp.views import ItemViewSet router = DefaultRouter() router.register(r'items', ItemViewSet) urlpatterns = [ path('admin/', admin.site.urls), path('api/', include(router.urls)), ] 进行数据库迁移 python manage.py makemigrations python manage.py migrate 运行开发服务器 python manage.py runserver 主要注意事项: 确保在 settings.py 中正确配置数据库连接 根据需要添加适当的权限控制 可以根据需求自定义序列化器和视图 建议添加适当的文档(可以使用 drf-yasg 或 drf-spectacular) 考虑添加测试用例 访问地址: API 根目录:http://localhost:8000/api/ 管理后台:http://localhost:8000/admin/

264 27 0
djangodrf
高DPI适配
benojan 2024-8-8

高DPI适配

451 27 0
Windows窗口程序
高DPI适配
  1. 1
  2. 2
  3. 尾页

搜索

搜索历史 清空

最新评论

标签

  • 重写
  • 继承
  • 虚函数
  • springboot
  • java
  • drf
  • 私服
  • 脚本
  • Windows窗口程序
  • cmake
  • dll
  • Modeless
  • Accelerators
  • WTL
  • ListCtrl
  • MFC
  • regex
  • 正则表达式
  • 虚拟环境
  • venv
  • radio
  • html
  • vim
  • nodejs
  • Linux
  • 宝塔面板
  • bt
  • chatGPT
  • AI
  • turtle
  • python
  • 我的世界
  • api
  • bukkit
  • 字符串操作
  • docker
  • 本地架设
  • 游戏
  • 编程
  • CodeCombat
  • 教程
  • 插件开发
  • Minecraft
  • GBK
  • Unicode
  • UTF-8
  • 字符集
  • 转换
  • 编码
  • boost

链接

  • 標準吳語字典
  • 台州方言維基
  • 溫嶺吳語微辭典
关于 友链 rss
Powered by benojan

备案号: