DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级

news/2025/3/16 23:32:36/文章来源:https://www.cnblogs.com/deali/p/18775970

前言

上个月底培训了一周就没时间更新博客

上周有一些空闲时间,就继续体验最近很火的AI辅助编程

之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现AI辅助编程

参考: 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案

但 Cline 插件消耗 token 太快了,换本地部署的 DeepSeek 的话不够聪明

我后面又换了 RooCode 、 Continue 这俩插件,还有试了一下新的IDE Trae

用下来 RooCode 还不错,这是 Cline 的 fork 版本,功能多了一些,消耗 Token 数量我没去统计,感觉可能差不多

大模型服务我选择了购买 DeepSeek 和 Claude 的 API

Trae 胜在免费,不过国内外区别对待是有点让人难受的

最终我在 Claude 和 DeepSeek 的辅助下,完成了 DjangoStarter 3.1 版本的开发

关于 DjangoStarter

DjangoStarter v3 是下一代 Django 项目快速开发模板,专为提升开发效率和性能而设计。

结合了 Django 的丰富功能和 Django-Ninja 的性能、灵活、简洁特性,v3 版本旨在为开发者提供一个更加强大、简洁和高速的开发体验。

通过这个全新的框架版本,开发者能够迅速搭建起符合现代 web 应用标准的项目基础架构。

之前我写了一篇文章专门介绍这个v3版本,这里就不赘述了。

感兴趣的同学可以查看: 关于正在开发中的DjangoStarter v3版本

重构界面

本次最大的改变就是使用 Tailwind CSS 取代了原本的 Bootstrap,并且加入了很多新的页面,比如用户中心、设置、关于、联系我们、登录、注册、用户协议等,基本就是往 CMS 的方向走。

我甚至一度想引入 wagtail ,不过后面想想还是算了,已经够重了,等下完全和小项目不沾边,哈哈哈😄

国际化支持 (beta)

这次还添加了国际化支持

Django 本身是有国际化功能的

只不过很多项目都去除了

这次我加入了国际化支持,不过只是测试版,只是添加了支持,翻译部分我还没做好,所以也就还没把切换语言的按钮加上。

以下是一些国际化功能的用法

在模板里

{% translate 'Home' %}

在python代码里

from django.utils.translation import gettext_lazy as _print(_('hello'))

生成翻译文件

src 目录下执行

django-admin makemessages -l [language_code]

language_code:

  • zh_HAns
  • en_US

其他语言可以参考Django官网

编译消息文件

依然是在 src 目录下执行

django-admin compilemessages

Windows 开发环境

如果是使用 windows 开发,需要先安装 gettext 工具

推荐使用 scoop 包管理器

scoop install gettext

安装完成之后,执行以下命令验证

xgettext --version

部分界面截图

旧版主页

先来看看旧版的主页长什么样

新版主页

新的界面使用 Tailwind CSS 重构,好看了很多

底部也是可以配置的

关于

这个页面做了很多动效,可以看看后面的动图

动效是用AOS做的,感觉还不错,挺方便的,不过要注意得使用 3.0 的 beta 版本,一开始没注意遇到了不少坑。

联系我们

这些联系方式都是可以配置的

表单也用上了 DjangoStarter 新版封装好的 BaseModelForm

封装好的 BaseModelForm 用起来是这样

class ContactModelForm(BaseModelForm):class Meta:model = Contactfields = ('name', 'email', 'phone', 'message')widgets = {'name': forms.TextInput(attrs={'placeholder': '请输入您的姓名'}),'email': forms.EmailInput(attrs={'placeholder': '请输入您的邮箱'}),'phone': forms.TextInput(attrs={'placeholder': '请输入您的联系电话'}),'message': forms.Textarea(attrs={'placeholder': '请输入您的留言内容', 'rows': 4})}

登录/注册

这个登录页面是之前使用 wagtail 那个项目里面搬过来的

注册页面也是类似的,这里就不贴图片了

个人中心

个人中心这里的布局来自之前的 TodayTV 项目,不过原来也是从其他在线模板参考来的,界面不是很好看。

然而我用 Claude 3.5 和 DeepSeek R1 反复优化多次,仍然无法让我满意,而且代码越来越乱,感觉后面还是得自己来改。

下面的关于我

修改资料

这也是从 TodayTV 项目来的,搭配 Django Forms 实现出来的效果还可以。

隐私政策

这个是用 Claude 生成的,使用 RooCode 优化的提示词,看着有模有样的。

服务条款也是类似的,这里我就不截图了。

Demo页面

为了方便演示各种功能,我还新增了Demo页面

当然这个不太协调的页面是 AI 辅助布局的

错误页面

并且用 Claude 生成了几个错误页面

包括403、404、500页面,都是类似的,这里我只贴403页面的截图

解决了一个 issue

https://github.com/Deali-Axy/DjangoStarter/issues/20

有用户反馈本来应该返回400的接口,实际返回了200

我看了之后发现这个问题属于是从DRF迁移到ninja的历史遗留问题

之前我在框架里封装 responses 用于快捷输出各种返回状态

def ok(message: str, data: Optional[dict] = None):return _gen_resp(message, data, 200)def forbidden(message: str, data: Optional[dict] = None):return _gen_resp(message, data, 403)def bad_request(message: str, data: Optional[dict] = None):return _gen_resp(message, data, 400)def not_found(message: str, data: Optional[dict] = None):return _gen_resp(message, data, 404)

但现在 ninja 里,一直返回的都是 200,这个就是处理返回状态码的地方出问题。

有几种解决思路,反正原本我用重写 renderer 的方式是没办法的,renderer里没法定义返回值,只能改变相应内容。

要不就是用 django 中间件,但需要解析 JSON 会影响性能

最终我对 responses 进行了改造,新增了 ResponseGenerator 这个类,代码就不贴了

关键实现就是用了 ninja 的 api.create_response 这个方法可以指定 status code

在需要用到的地方,比如 src/apps/account/apis/auth/apis.py

router = Router(tags=['auth'])_resp = ResponseGenerator(router=router)@router.post('/register', url_name='account/auth/register')
def register(request, data: RegisterSchema):if User.objects.filter(username=data.username).exists():return _resp.bad_request(request, '用户名已存在!')if data.phone:phone_pattern = '^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$'if not re.match(phone_pattern, data.phone):return _resp.bad_request(request, '手机号码格式不对!')if UserProfile.objects.filter(phone=data.phone).exists():return _resp.bad_request(request, '手机号已存在!')if data.password != data.confirm_password:return _resp.bad_request(request, '密码不一致!')

相比起原来的,每个返回的响应需要添加 request 参数

虽然比起原来复杂一点,也算是搞定了。

Todos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20243426 实验一《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2434 姓名: 樊泽睿 学号:20243426 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析,要有过程) 3.编写程序,练习变量…

第01章 数据库概述

第01章 数据库概述 1. 为什么要使用数据库持久化 (Persistence): 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要作…

【每日一题】20250316

【每日一题】曲线 \(\displaystyle y=3(x^2+x-\sqrt{4x^2+3})e^{-2x^2}\) 在点 \((-1,0)\) 处的切线方程为_________.如图所示,取一段长为 \(12\) 的绳子,如果把这段绳子的两个端点分别固定在画图板上不同的两点 \(F_1\) 和 \(F_2\) 处,当绳长大于 \(F_1\) 和 \(F_2\) 之间…

foobar2000 v2.24.3 汉化版

foobar2000 v2.24.3 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

拉格朗日插值算法

首先介绍下作用 在平面上给定 n 个点,求一条多项式图像穿过所有的点 (每个点横坐标不同)由浅入深,首先想一个悬浮点 1 ,它在除 1 以外给定的点的横坐标上函数值都是 0 。已知它的横坐标 \(x_1\) , 怎么用函数图像表示 我们一拍脑袋发现,可以这么表示 \[f1(x) = \prod_{i =…

本地部署Gemma3模型

本地部署Gemma3模型 1. 拉取并运行 Ollama 容器 # 拉取 Ollama 镜像 docker pull ollama/ollama# 运行 Ollama 容器 docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama2. 进入容器并部署 Gemma3 模型(默认4B版 ) # 进入 Ollama 容…

Anaconda中启动Jupyter lab的方法

Anaconda中启动Jupyter lab的方法: 1、在Anaconda Prompt中,使用命令来启动:jupyter lab 2、在Anaconda界面中点击Jupyter lab下方的launch按钮启动,如下图所示:

React+Next.js+MaterialUI+Toolpad技术栈学习——安装

今天跟大家分享一个React+Next.js+MaterialUI技术栈的前端框架Toolpad。相关资源MaterialUI Toolpad框架效果安装运行安装命令npx create-toolpad-app@latest your-app cd your-app npm run dev文件结构 无身份认证 ├── app │ ├── (dashboard) │ │ ├── layou…

测试驱动开发(TDD)浅析

测试驱动开发(TDD:Test Driven Development)是敏捷开发中的一项核心实践,推崇通过测试来驱动整个开发的进行。TDD有别于传统“先编码,后测试”的开发过程,而是要求在编写业务代码之前,先编写测试用例。TDD的概念大致在上世纪90年代随着极限编程(XP:Extreme Programmin…

(18).命令模式

命令模式 命令模式的核心思想是将请求封装为个对象,将其作为命令发起者和接收者的中介,而抽象出来的命令对象又使得能够对一系列请求进行操作,如对请求进行排队,记录请求日志以及支持可撤销的操作等。命令模式参与者:◇命令的执行者(接收者Receiver):它单纯的只具体实现了功…

学嵌入式C语言,看这一篇就够了(5)

C语言的运算符 学习编程语言,应该遵循“字-->词-->句-->段--->章”,对于一条有意义的语句而言,是离不开标点符号的运算符指明要进行的运算和操作,操作数是指运算符的操作对象,根据运算符操作数的数目不同,C语言标准把运算符分为三种:单目运算符(一元运算符…

20242313 2024-2025-2 《Python程序设计》实验一报告

20242313 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2423 姓名:曾海鹏 学号:20242313 实验教师:王志强 实验日期:2025年3月16日 必修/选修:公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并…