网站建设多少钱裙怎样建设网站教程
2026/1/10 15:58:05 网站建设 项目流程
网站建设多少钱裙,怎样建设网站教程,wordpress端口更改,做网站怎么申请百度推广数据集渲染任务管理——后端搭建引言一、主要功能二、实现步骤2.1 创建App#xff08;1#xff09;使用命令行创建App#xff08;2#xff09;注册App#xff08;3#xff09;配置路由2.2 创建Model#xff08;1#xff09;配置媒体文件地址#xff08;2#xff09;创…数据集渲染任务管理——后端搭建引言一、主要功能二、实现步骤2.1 创建App1使用命令行创建App2注册App3配置路由2.2 创建Model1配置媒体文件地址2创建model3迁移数据库2.3 在Admin中注册模型2.4 效果引言计算机专业硕士在读主要研究方向是特定目标大斜视角目标检测与定位。因为要做的是特定目标公开数据集较少经过多方考虑还是决定要自建数据集。最终考虑的解决方案还是BlenderPython API的方式项目起名叫RealEarthStudio。这系列文章主要对开发过程进行记录方便我个人后续查看也给相类似方向的同学提供一个思路。【项目目录】项目目录链接一、主要功能功能数据集渲染任务管理——后端搭建。背景现在开始开发第二个应用主要实现数据集渲染任务管理。效果码云项目链接https://gitee.com/charlsewyq/RealEarthStudio二、实现步骤2.1 创建App1使用命令行创建Apppython manage.py startapp app2_rendering_task2注册App在App目录下编辑apps文件app2_rendering_task/apps.pyfromdjango.appsimportAppConfigclassApp2RenderingTaskConfig(AppConfig):default_auto_fielddjango.db.models.BigAutoFieldnameapp2_rendering_taskverbose_name️ 应用2数据集渲染任务管理模块在主项目目录的settings.py中添加appINSTALLED_APPS[...,# 我的应用app2_rendering_task.apps.App2RenderingTaskConfig,]3配置路由在App目录下创建urls.pyfromdjango.urlsimportpathfrom.importviews app_nameapp2_rendering_taskurlpatterns[# 子路由]在主项目目录的urls.py修改fromdjango.contribimportadminfromdjango.urlsimportpath,include urlpatterns[...# app2: 数据集渲染任务管理模块path(api/app2/,include(app2_rendering_task.urls)),]2.2 创建Model我想创建渲染任务Model包含以下字段渲染ID字符串类型模型的唯一标识自动生成渲染时间时间类型上传模型的时间根据后台时间自动记录目标模型多对多对应目标模型Modelapp1_model_management.TargetModel场景模型多对多对应场景模型Modelapp1_model_management.SceneModel日光方位角浮点类型阳光照射的方位角限制为0-360°默认为0°日光高低角浮点类型阳光照射的高低角限制为0-90°默认为90°相机距离JSON类型相机距离目标模型的距离数组限制为正值相机高低角JSON类型相机照射的高低角数组限制为0-90°相机方位角间隔浮点类型阳光照射的方位角限制为0-360°默认为45°渲染图像分辨率宽整型渲染图像的宽。渲染图像分辨率高整型渲染图像的宽。渲染图像像素计算属性渲染图像的像素值。模型器类别字符串类型渲染器类别EEVEE或CYCLES渲染图像地址文件地址类型只读用于存储渲染结果删除数据时自动删除对应文件夹中的文件1配置媒体文件地址在主项目目录创建文件夹media在settings.py中添加以下内容MEDIA_URL/media/MEDIA_ROOTos.path.join(BASE_DIR,media)配置媒体文件服务在主项目目录下编辑urls.py文件...# 只在DEBUG模式下提供媒体文件服务ifsettings.DEBUG:urlpatternsstatic(settings.MEDIA_URL,document_rootsettings.MEDIA_ROOT)2创建model还需要完成以下功能自动生成UUID确保模型ID不重复自动记录时间把目标模型和删除数据时同步删除模型文件修改文件数据时替换模型文件在App目录下编辑model文件app2_rendering_task/models.pyimportosimportuuidfromdjango.dbimportmodelsfromdjango.utilsimporttimezonefromdjango.core.exceptionsimportValidationErrorimportshutilfromapp1_model_management.modelsimportTargetModel,SceneModel# 验证器 defvalidate_azimuth(value):ifnot(0value360):raiseValidationError(方位角必须在 0° 到 360° 之间。)defvalidate_elevation(value):ifnot(0value90):raiseValidationError(高低角必须在 0° 到 90° 之间。)defvalidate_positive_number_list(value):验证是否为正数列表ifnotisinstance(value,list):raiseValidationError(必须是一个列表。)foriteminvalue:ifnotisinstance(item,(int,float))oritem0:raiseValidationError(所有值必须是正数。)defvalidate_elevation_list(value):验证高低角列表 0-90ifnotisinstance(value,list):raiseValidationError(必须是一个列表。)foriteminvalue:ifnotisinstance(item,(int,float))ornot(0item90):raiseValidationError(所有高低角必须在 0° 到 90° 之间。)# 模型 defrendered_result_path(instance,filename):场景模型上传路径returnos.path.join(Render,f{instance.render_time}-{instance.render_id})classRenderingTask(models.Model):RENDERER_CHOICES[(EEVEE,EEVEE),(CYCLES,Cycles),]# 任务信息render_idmodels.UUIDField(渲染ID,defaultuuid.uuid4,editableFalse,uniqueTrue,help_text渲染任务的唯一标识)render_timemodels.DateTimeField(verbose_name渲染时间,defaulttimezone.now)# 模型target_modelsmodels.ManyToManyField(TargetModel,verbose_name目标模型,blankTrue,related_namerendering_tasks)scene_modelsmodels.ManyToManyField(SceneModel,verbose_name场景模型,blankTrue,related_namerendering_tasks)# 日光参数sun_azimuthmodels.FloatField(日光方位角,default0.0,validators[validate_azimuth],help_text阳光照射的方位角0°-360°)sun_elevationmodels.FloatField(日光高低角,default90.0,validators[validate_elevation],help_text阳光照射的高低角0°-90°)# 相机参数camera_distancesmodels.JSONField(相机距离,defaultlist,blankTrue,validators[validate_positive_number_list],help_text相机到目标的距离列表正值)camera_elevationsmodels.JSONField(相机高低角,defaultlist,blankTrue,validators[validate_elevation_list],help_text相机高低角列表0°-90°)camera_rotation_stepmodels.FloatField(相机方位角间隔,default45.0,validators[validate_azimuth],help_text相机方位角采样间隔0°-360°)# 渲染分辨率image_widthmodels.PositiveIntegerField(渲染图像分辨率宽,default1920)image_heightmodels.PositiveIntegerField(渲染图像分辨率高,default1080)# 渲染器类别renderer_typemodels.CharField(渲染器类别,max_length10,choicesRENDERER_CHOICES,defaultEEVEE)# 渲染结果文件rendered_resultmodels.FileField(渲染图像地址,upload_torendered_result_path,blankTrue,nullTrue,help_text系统自动生成的渲染结果图像只读)classMeta:verbose_name01-渲染任务verbose_name_plural01-渲染任务ordering[-render_time]def__str__(self):returnf{self.render_id}propertydefimage_pixels(self):计算属性总像素数returnself.image_width*self.image_heightdefsave(self,*args,**kwargs):可选在保存前调用 full_clean() 进行验证self.full_clean()super().save(*args,**kwargs)defdelete(self,*args,**kwargs): 重写 delete 方法 1. 先删除关联的渲染输出文件夹 2. 再调用父类 delete 删除数据库记录 ifself.rendered_result:# 获取文件的绝对路径folder_dirself.rendered_result.path# 如果文件存在则删除ifos.path.isdir(folder_dir):shutil.rmtree(folder_dir)# 调用父类的delete方法删除数据库记录super().delete(*args,**kwargs)3迁移数据库# 生成迁移文件python manage.py makemigrations app2_rendering_task# 应用迁移python manage.py migrate app2_rendering_task2.3 在Admin中注册模型在App目录下编辑admin文件app2_rendering_task/admin.pyfromdjango.contribimportadminfrom.modelsimport*fromdjango.utils.safestringimportmark_safeadmin.register(RenderingTask)classRenderingTaskAdmin(admin.ModelAdmin):list_display[render_id,render_time,renderer_type,image_width,image_height,render_progress_display]search_fields[render_id]list_filter[renderer_type,render_time]readonly_fields[render_id,render_time,render_progress,rendered_result]# 字段分组显示fieldsets((任务信息,{fields:(render_id,render_time,renderer_type,render_progress)}),(模型配置,{fields:(target_models,scene_models)}),(光照参数,{fields:(sun_azimuth,sun_elevation)}),(相机参数,{fields:(camera_distances,camera_elevations,camera_rotation_step)}),(图像设置,{fields:(image_width,image_height)}),(渲染结果,{fields:(rendered_result,)}))admin.display(description渲染状态)defrender_progress_display(self,obj):ifobj.render_progress0:# 如果状态是pending显示一个链接returnmark_safe(fa href#开始渲染/a)else:# 否则显示当前状态returnf{obj.render_progress}%2.4 效果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询