You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中除Admin后台外,如何实现注册用户向数据库添加数据?

当然可以啊!这在Django开发里是非常常见的需求,完全能实现让注册用户往数据库里添加数据——就像你说的用户添加歌曲到歌单的功能,我给你一步步拆解怎么弄:

实现注册用户添加数据的完整方案

1. 先定义好数据模型

首先得把歌单和歌曲的数据结构搭好,还要和用户模型关联起来,这样才能追踪是谁创建的内容:

from django.db import models
from django.contrib.auth.models import User

# 歌单模型,关联创建它的用户
class Playlist(models.Model):
    name = models.CharField(max_length=100)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

# 歌曲模型,关联所属歌单和添加它的用户
class Song(models.Model):
    title = models.CharField(max_length=200)
    artist = models.CharField(max_length=100)
    playlist = models.ForeignKey(Playlist, on_delete=models.CASCADE, related_name='songs')
    added_by = models.ForeignKey(User, on_delete=models.CASCADE)

这里用ForeignKey把歌单/歌曲和用户绑定,确保每一条数据都能对应到具体的用户。

2. 创建用户填写的表单

用Django的ModelForm可以快速生成和模型绑定的表单,我们只让用户填写歌曲的标题和歌手,其他关联字段后端自动处理:

from django import forms
from .models import Song

class SongForm(forms.ModelForm):
    class Meta:
        model = Song
        fields = ['title', 'artist']  # 只展示需要用户输入的字段

3. 编写处理请求的视图

接下来写视图逻辑,要确保只有登录用户才能访问,用@login_required装饰器做权限校验,还要保证用户只能操作自己的歌单:

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from .models import Playlist, Song
from .forms import SongForm

@login_required
def add_song_to_playlist(request, playlist_id):
    # 只允许用户操作自己的歌单,找不到就返回404
    playlist = get_object_or_404(Playlist, id=playlist_id, owner=request.user)
    
    if request.method == 'POST':
        form = SongForm(request.POST)
        if form.is_valid():
            # 先不保存到数据库,手动补充关联字段
            song = form.save(commit=False)
            song.playlist = playlist
            song.added_by = request.user
            song.save()
            # 跳回歌单详情页,给用户反馈
            return redirect('playlist_detail', playlist_id=playlist.id)
    else:
        form = SongForm()
    
    return render(request, 'add_song.html', {'form': form, 'playlist': playlist})

这里用commit=False先创建歌曲对象,再手动设置所属歌单和添加用户,避免用户篡改这些敏感字段。

4. 配置URL路由

把视图映射到具体的URL,方便用户访问:

from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('playlist/<int:playlist_id>/add-song/', views.add_song_to_playlist, name='add_song_to_playlist'),
]

5. 编写前端模板

最后做一个简单的模板让用户看到并提交表单,别忘了加Django要求的CSRF令牌:

<!DOCTYPE html>
<html>
<head>
    <title>添加歌曲到歌单</title>
</head>
<body>
    <h1>给歌单 "{{ playlist.name }}" 添加歌曲</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">添加歌曲</button>
    </form>
    <a href="{% url 'playlist_detail' playlist.id %}">返回歌单</a>
</body>
</html>

额外的小提示

  • 权限加固:一定要做好权限校验,比如上面的视图里我们限制了用户只能操作自己的歌单,避免恶意用户修改他人数据。
  • 表单验证:你还可以在表单里加自定义验证,比如检查同一首歌是否已经在歌单里了,避免重复添加。
  • 用户体验:可以用Django的messages框架,在添加成功后给用户弹出一个提示,让操作更友好。

内容的提问来源于stack exchange,提问作者Deps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:59