DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级
前言
上个月底培训了一周就没时间更新博客
上周有一些空闲时间,就继续体验最近很火的AI辅助编程
之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现AI辅助编程
但 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 = Contact
fields = ('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
- https://django-ninja.cn 上有不少 ninja 周边生态组件,后续可以用上
- 将 admin 由 simpleui 切换到 unfold admin
- 增加更多的默认页面
DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级的更多相关文章
- NPC AI驱动最基本过程
NPC AI驱动最基本过程 NPCmgr中比较重要的是加载NPC和一个NPCAI的一个指针 他利用map那个线程的定时到底做了啥呢 void NPCmgr::npcAITimer() { time_t ...
- 【可视化】DataV接入ECharts图表库 可视化利器强强联手
DataV接入ECharts图表库 可视化利器强强联手 摘要: 两个扛把子级产品的结合,而且文末有彩蛋. DataV 数据可视化是搭建每年天猫双十一作战大屏的幕后功臣,ECharts 是广受数据可视化 ...
- 微软发布云端基因服务:推动AI驱动的精准医疗
微软发布云端基因服务:推动AI驱动的精准医疗 2018年03月07日 00:00:00 微软研究院AI头条 阅读数:117 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
- AI驱动的超分辨技术落地实践
近年来,随着深度学习技术的快速发展,基于AI的超分辨技术在图像恢复和图像增强领域呈现出广阔的应用前景,受到了学术界和工业界的关注和重视.但是,在RTC视频领域中,很多AI算法并不能满足实际场景下的应用 ...
- 迈入 8K 时代,AI 驱动超高清 “视” 界到来
2021 年,超高清迈入 "8K" 时代.超高清视频将带来全新视听体验,但超高清生产在内容生产层面也面临着超高清存量少.生产设备更新换代慢.制作周期成倍增加的困境.在 7 月 10 ...
- 【Linux高级驱动】input子系统框架
[1.input子系统框架(drivers\input)] 如何得出某个驱动所遵循的框架? 1) 通过网络搜索 2) 自己想办法跟内核代码! 2.1 定位此驱动是属于哪种类 ...
- 【Linux高级驱动】input子系统框架【转】
转自:http://www.cnblogs.com/lcw/p/3802617.html [1.input子系统框架(drivers\input)] 如何得出某个驱动所遵循的框架? 1) 通过网 ...
- .net core +codefirst(.net core 基础入门,适合这方面的小白阅读) 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇
.net core +codefirst(.net core 基础入门,适合这方面的小白阅读) 前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以. ...
- 「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...
- ChatGPT 与 Midjourney 强强联手,让先秦阿房宫重现辉煌!
Midjourney 是一款非常特殊的 AI 绘画聊天机器人,它并不是软件,也不用安装,而是直接搭载在 Discord 平台之上,所有的功能都是通过调用 Discord 的聊天机器人程序实现的.要想使 ...
随机推荐
- WorldWind源码剖析系列:漫游时四叉树瓦片类QuadTile的运行思路
用户在窗口漫游时,需要加载精细的高程和纹理数据时的处理思路:当用户漫游时直到窗口相机的视场角的1/2小于(瓦片大小*瓦片绘制距离的乘积)时,才初始化四叉树瓦片类QuadTile,或者加载本地缓存中的数 ...
- 基于Netty,从零开发IM(四):编码实践篇(系统优化)
本文由作者"大白菜"分享,有较多修订和改动.注意:本系列是给IM初学者的文章,IM老油条们还望海涵,勿喷! 1.引言 前两篇<编码实践篇(单聊功能)>.<编码实践 ...
- [LC793]阶乘函数后 K 个零
题目描述 f(x) 是 x! 末尾是 0 的数量.(回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 ) 例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 : ...
- 聊一聊 C#异步 任务延续的三种底层玩法
一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故障,是一 ...
- Solution Set - “谁将重力悬空,坠入一场蔚蓝的梦”
目录 0.「NOI Simu.」皮配 1.「BZOJ #4671」异或图 2.「CF 1158F」Density of subarrays 3.「CF 794G」Replace All 4.「UR # ...
- c# Moq Ref/out 参数
public interface IService { void DoSomething(ref string a); void DoSomething2(out string a); } [Test ...
- Java开发常用工具链接-copy
Java开发常用工具链接这里汇总了下Java开发过程中常用的一些工具,与一些自动化生成工具. 1. Spring相关工具通过Sql生成Spring相关的项目. Sql生成SpringBoot项目通过M ...
- Win10 20H2 家庭版 环境变量
20H2 家庭版设置环境变量,此电脑--->属性,弹出的是新版本的设置界面,选择左侧的"关于",在最右侧的"相关设置"里面,选择"高级系统设置& ...
- SQL SERVER巡检脚本
print'----------------------------' print'开始巡检' print'----------------------------' print'1.查看数据库版本信 ...
- Ubuntu Linux部署DeepSeek
技术背景 DeepSeek是这段时间最热门的话题之一,其蒸馏模型可以实现低成本而高质量的推理,使得我们现在可以在本地小型化的硬件上也用上大模型这一AI利器.本文主要介绍通过Ollama来部署DeepS ...