【项目开发】Django后台管理系统构建

Django后台管理系统构建

1. 权限管理

首先,我们需要在 Django 中创建一个新的应用来管理用户和权限。我们将其命名为 accounts

1
python manage.py startapp accounts

accounts 应用中,我们需要创建两个模型:UserPermission

1
2
3
4
5
6
7
8
9
10
11
# accounts/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
is_admin = models.BooleanField(default=False)

class Permission(models.Model):
name = models.CharField(max_length=255)
url = models.CharField(max_length=255)
method = models.CharField(max_length=10) # GET, POST, PUT, DELETE

我们需要在 settings.py 中注册 accounts 应用,并配置 AUTH_USER_MODEL

1
2
3
4
5
6
7
# settings.py
INSTALLED_APPS = [
# ...
'accounts',
]

AUTH_USER_MODEL = 'accounts.User'

接下来,我们需要创建一个管理后台来管理用户和权限。

1
2
python manage.py makemigrations
python manage.py migrate

accounts 应用中创建一个名为 admin.py 的文件,用于定义管理后台的视图和 URL。

1
2
3
4
5
6
7
8
9
# accounts/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User, Permission

class PermissionAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'method')

admin.site.register(Permission, PermissionAdmin)

2. 数据库构建

我们需要创建一个新的应用来管理数据库。我们将其命名为 database

1
python manage.py startapp database

database 应用中,我们需要创建一个模型来存储训练数据。

1
2
3
4
5
6
# database/models.py
from django.db import models

class TrainingData(models.Model):
data = models.TextField()
label = models.CharField(max_length=255)

我们需要在 settings.py 中注册 database 应用。

1
2
3
4
INSTALLED_APPS = [
# ...
'database',
]

接下来,我们需要创建一个管理后台来管理训练数据。

1
2
python manage.py makemigrations
python manage.py migrate

database 应用中创建一个名为 admin.py 的文件,用于定义管理后台的视图和 URL。

1
2
3
4
5
6
7
8
# database/admin.py
from django.contrib import admin
from .models import TrainingData

class TrainingDataAdmin(admin.ModelAdmin):
list_display = ('data', 'label')

admin.site.register(TrainingData, TrainingDataAdmin)

3. 权限验证

我们需要在 views.py 中添加权限验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
# accounts/views.py
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render, redirect
from .models import User, Permission

@login_required
@permission_required('accounts.is_admin')
def admin_view(request):
return render(request, 'admin.html')

@login_required
def user_view(request):
return render(request, 'user.html')

我们需要在 urls.py 中配置 URL。

1
2
3
4
5
6
7
8
# accounts/urls.py
from django.urls import path
from .views import admin_view, user_view

urlpatterns = [
path('admin/', admin_view, name='admin'),
path('user/', user_view, name='user'),
]

4. 数据库操作

我们需要在 views.py 中添加数据库操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# database/views.py
from django.shortcuts import render, redirect
from .models import TrainingData

def add_data(request):
if request.method == 'POST':
data = request.POST.get('data')
label = request.POST.get('label')
TrainingData.objects.create(data=data, label=label)
return redirect('database:index')
return render(request, 'add_data.html')

def delete_data(request, pk):
TrainingData.objects.get(pk=pk).delete()
return redirect('database:index')

def index(request):
data = TrainingData.objects.all()
return render(request, 'index.html', {'data': data})

我们需要在 urls.py 中配置 URL。

1
2
3
4
5
6
7
8
9
# database/urls.py
from django.urls import path
from .views import add_data, delete_data, index

urlpatterns = [
path('add/', add_data, name='add_data'),
path('delete/<int:pk>/', delete_data, name='delete_data'),
path('', index, name='index'),
]

5. 权限分配

我们需要在 settings.py 中配置权限分配。

1
2
3
4
5
6
7
8
9
# settings.py
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'accounts.backends.CaseInsensitiveModelBackend',
]

ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_USERNAME_REQUIRED = True

我们需要在 accounts 应用中创建一个名为 backends.py 的文件,用于定义自定义后端。

1
2
3
4
5
6
7
8
9
10
11
12
# accounts/backends.py
from django.contrib.auth.backends import ModelBackend
from .models import User

class CaseInsensitiveModelBackend(ModelBackend):
def authenticate(self, request, username=None, password=None):
try:
user = User.objects.get(username=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None

6. 模板

我们需要在 templates 目录下创建一个名为 admin.html 的文件,用于显示管理员界面。

1
2
3
4
5
6
7
<!-- templates/admin.html -->
{% extends 'base.html' %}

{% block content %}
<h1>管理员界面</h1>
<p>欢迎 {{ user.username }}!</p>
{% endblock %}

我们需要在 templates 目录下创建一个名为 user.html 的文件,用于显示普通用户界面。

1
2
3
4
5
6
7
<!-- templates/user.html -->
{% extends 'base.html' %}

{% block content %}
<h1>普通用户界面</h1>
<p>欢迎 {{ user.username }}!</p>
{% endblock %}

我们需要在 templates 目录下创建一个名为 add_data.html 的文件,用于添加数据。

1
2
3
4
5
6
7
8
9
10
11
12
<!-- templates/add_data.html -->
{% extends 'base.html' %}

{% block content %}
<h1>添加数据</h1>
<form method="post">
{% csrf_token %}
<input type="text" name="data" placeholder="数据">
<input type="text" name="label" placeholder="标签">
<button type="submit">添加</button>
</form>
{% endblock %}

我们需要在 templates 目录下创建一个名为 index.html 的文件,用于显示数据列表。

1
2
3
4
5
6
7
8
9
10
11
<!-- templates/index.html -->
{% extends 'base.html' %}

{% block content %}
<h1>数据列表</h1>
<ul>
{% for data in data %}
<li>{{ data.data }} - {{ data.label }}</li>
{% endfor %}
</ul>
{% endblock %}

7. 静态文件

我们需要在 static 目录下创建一个名为 css 的文件夹,用于存放 CSS 文件。

1
mkdir static/css

我们需要在 static 目录下创建

8. 数据库设计建议

  1. 使用ORM(Object-Relational Mapping)工具: Django内置了ORM工具,称为Django ORM,可以让你使用Python代码操作数据库,而不需要直接写SQL语句。使用ORM可以提高开发效率和代码可读性。
  2. 使用模型(Model): 在Django中,模型是ORM的核心概念。模型代表了数据库中的一个表,通过模型可以定义表的结构和行为。
  3. 使用迁移(Migration): Django提供了迁移工具,可以帮助你管理数据库的结构变化。通过迁移,可以轻松地添加、删除或修改表结构。
  4. 使用数据库连接池: Django提供了数据库连接池功能,可以提高数据库连接的效率和性能。

代码示例

下面是一个简单的例子,展示了如何使用Django ORM和模型来操作数据库:

1
2
3
4
5
6
7
8
9
10
# models.py
from django.db import models

class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
publication_date = models.DateField()

def __str__(self):
return self.title
1
2
3
4
5
6
7
# views.py
from django.shortcuts import render
from .models import Book

def book_list(request):
books = Book.objects.all()
return render(request, 'book_list.html', {'books': books})
1
2
3
4
5
6
7
# urls.py
from django.urls import path
from . import views

urlpatterns = [
path('books/', views.book_list, name='book_list'),
]

前端使用Vue.js

  1. 使用Vue CLI创建项目: 使用Vue CLI创建一个新的Vue.js项目。
  2. 使用Axios发送请求: 使用Axios发送请求到Django后台,获取数据。
  3. 使用Vue组件: 使用Vue组件来渲染数据。
1
2
3
4
5
6
7
8
9
10
11
12
// main.js
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'

Vue.prototype.$http = axios.create({
baseURL: 'http://localhost:8000/api/',
})

new Vue({
render: h => h(App)
}).$mount('#app')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// App.vue
<template>
<div>
<ul>
<li v-for="book in books" :key="book.id">{{ book.title }}</li>
</ul>
</div>
</template>

<script>
export default {
data() {
return {
books: []
}
},
mounted() {
this.$http.get('/books/').then(response => {
this.books = response.data
})
}
}
</script>

注意事项

  • 确保Django和Vue.js项目都正确配置了环境和依赖。
  • 确保Django后台和Vue.js前端都正确地使用了Axios发送请求和接收数据。
  • 确保Vue.js前端正确地渲染了数据。
  • Copyrights © 2024-2025 brocademaple
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信