25 Django模型注册到管理后台

25 Django模型注册到管理后台

在Django中,注册模型到管理后台是一个很重要的步骤,使我们可以通过后台界面轻松管理数据。下面将通过一个简单的案例,详细介绍如何实现这一过程。

创建模型

首先,我们需要创建一个模型。在你的Django应用中,找到models.py文件,定义一个简单的模型。例如,假设我们要创建一个 Book 模型来管理图书信息。

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

class Book(models.Model):
title = models.CharField(max_length=200, verbose_name='书名')
author = models.CharField(max_length=100, verbose_name='作者')
published_date = models.DateField(verbose_name='出版日期')

def __str__(self):
return self.title

在这个例子中,我们定义了 Book 模型,其中包含 titleauthorpublished_date 字段。__str__ 方法用于返回图书的标题。

注册模型到管理后台

接下来,我们需要将刚刚创建的模型注册到Django的管理后台。打开 admin.py 文件,并按如下方式进行设置:

1
2
3
4
5
6
7
8
from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
search_fields = ('title', 'author')

在上面的代码中,我们首先导入了 adminBook 模型。然后使用 @admin.register(Book) 装饰器来注册模型。此外,我们还定义了 BookAdmin 类,其中的 list_display 指定了在后台列表页面上显示的字段,search_fields 允许我们按书名和作者进行搜索。

迁移数据库

在将模型注册到管理后台之前,我们需要进行数据库迁移,以确保我们的模型可以在数据库中创建对应的表。运行以下命令:

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

这个过程将在数据库中创建 Book 表。

访问后台

确保你已创建超级用户以访问管理后台。若还未创建,可以使用以下命令:

1
python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。

接下来,运行开发服务器:

1
python manage.py runserver

然后,在浏览器中访问 http://127.0.0.1:8000/admin,使用你的超级用户信息登录。

在后台管理界面中,你会看到左侧菜单中出现了 Books 选项,点击进入可以看到添加、编辑和删除书籍的功能。

添加测试数据

现在,你可以通过 Django 后台添加几本书籍进行测试。在 Books 页面中,点击 “添加书籍”,填写书籍信息,然后保存。

总结

到此,我们已经成功创建了一个 Book 模型并将其注册到Django管理后台。通过这种方式,你可以轻松地管理应用的数据。掌握这一过程后,你可以扩展更多模型并实现更复杂的管理功能。通过探索 ModelAdmin 的其他属性和方法,来提升你的管理界面的功能性和用户体验。

26 自定义 Django 管理界面

26 自定义 Django 管理界面

在 Django 中,admin 界面是非常重要的一个部分,它使得数据管理变得非常简单。然而,Django 的默认管理界面可能并不能完全满足我们的需求。因此,本文将介绍如何自定义 Django 管理界面,以适应不同的项目需求。

创建自定义管理类

首先,我们需要为我们的模型创建一个自定义管理类。假设我们有一个 Book 模型,结构如下:

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

class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.title

接下来,我们为 Book 模型创建一个自定义管理类:

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from .models import Book

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at') # 显示的字段
search_fields = ('title', 'author') # 搜索功能
list_filter = ('author',) # 过滤器

admin.site.register(Book, BookAdmin)

解释代码

  • list_display 用于指定在列表页中显示的字段,titleauthorcreated_at 将在管理界面中显示。
  • search_fields 让管理界面中的搜索框支持通过书名和作者进行搜索。
  • list_filter 提供了一个过滤器,用户可以按作者进行过滤。

自定义表单

在某些情况下,我们可能需要自定义管理界面中的表单。可以使用 ModelForm 进行自定义。例如,我们要在 Book 的创建/edit 页面中添加一个自定义的字段。

1
2
3
4
5
6
7
8
9
10
11
12
from django import forms

class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['title', 'author']

def clean_title(self):
title = self.cleaned_data.get('title')
if not title:
raise forms.ValidationError("这本书的标题不能为空!")
return title

然后在 BookAdmin 中使用这个表单:

1
2
3
4
5
6
7
class BookAdmin(admin.ModelAdmin):
form = BookForm
list_display = ('title', 'author', 'created_at')
search_fields = ('title', 'author')
list_filter = ('author',)

admin.site.register(Book, BookAdmin)

自定义管理界面模板

如果需要对 Django admin 的界面进行进一步的自定义,可以重写模板。比如我们想在 Book 模型的管理页中加入一些自定义信息,首先在 app 的 templates/admin 目录中创建一个文件:

1
2
3
4
5
6
myapp/
templates/
admin/
myapp/
book/
change_form.html

change_form.html 中,我们可以添加一些自定义 HTML 代码,比如:

1
2
3
4
5
6
{% extends "admin/change_form.html" %}

{% block content %}
<h1>欢迎来到书籍管理页面</h1>
{{ block.super }} {# 保留默认内容 #}
{% endblock %}

这个自定义模板将展示一个欢迎消息。

自定义动作

Django admin 还支持自定义批量操作。我们可以定义一些动作,让用户在管理界面上对选中的条目执行特定操作。下面是如何实现一个简单的删除动作的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at')
search_fields = ('title', 'author')
list_filter = ('author',)

actions = ['mark_as_deleted']

def mark_as_deleted(self, request, queryset):
queryset.update(status='deleted') # 假设 Book 模型有一个状态字段
self.message_user(request, "选中的书籍已标记为删除!")

mark_as_deleted.short_description = "标记为已删除"

admin.site.register(Book, BookAdmin)

解释代码

  • actions 列表定义了我们可以在管理界面上执行的操作。
  • mark_as_deleted 是自定义的操作,用于将选中的书籍状态更新为删除,并显示信息。
  • short_description 用于设置在管理操作下拉框中显示的文本。

结论

通过以上方法,我们可以轻松自定义 Django 的管理界面,以满足不同的需求。在实际开发中,灵活运用这些技巧将大大提高管理效率。希望本教程能帮助你更好地掌控 Django 的 admin 界面!

27 Django 用户注册与登录实战教程

27 Django 用户注册与登录实战教程

在本节中,我们将介绍如何在 Django 中实现用户注册与登录功能。通过实例代码,你将了解如何使用 Django 的内置用户模型和认证框架来处理用户注册和登录。

创建 Django 项目和应用

首先,确保你安装了 Django。如果未安装,可以使用以下命令:

1
pip install django

然后,创建一个新的 Django 项目和应用:

1
2
3
django-admin startproject myproject
cd myproject
django-admin startapp accounts

settings.py 中,添加 accounts 应用到 INSTALLED_APPS:

1
2
3
4
INSTALLED_APPS = [
...
'accounts',
]

用户注册

创建用户注册表单

accounts 应用中,创建一个表单用于用户注册。我们将使用 Django 表单来处理用户输入。首先在 accounts/forms.py 中创建一个 UserRegistrationForm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from django import forms
from django.contrib.auth.models import User

class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
password_confirm = forms.CharField(widget=forms.PasswordInput)

class Meta:
model = User
fields = ['username', 'email', 'password']

def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
password_confirm = cleaned_data.get("password_confirm")

if password != password_confirm:
raise forms.ValidationError("Passwords do not match.")

创建视图处理注册逻辑

接下来,在 accounts/views.py 中创建注册视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.shortcuts import render, redirect
from .forms import UserRegistrationForm

def register(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data['password'])
user.save()
return redirect('login')
else:
form = UserRegistrationForm()
return render(request, 'registration/register.html', {'form': form})

创建注册模板

accounts/templates/registration/register.html 中,添加注册表单的 HTML 代码:

1
2
3
4
5
6
<h2>User Registration</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>

更新 URL 配置

accounts/urls.py 中添加注册视图的 URL:

1
2
3
4
5
6
from django.urls import path
from .views import register

urlpatterns = [
path('register/', register, name='register'),
]

在项目的主 URL 配置中包含 accounts.urls

1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
]

用户登录

创建登录视图

accounts/views.py 中,添加登录视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm

def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('home') # 重定向到主页面
else:
form = AuthenticationForm()
return render(request, 'registration/login.html', {'form': form})

创建登录模板

accounts/templates/registration/login.html 中,添加登录表单的 HTML 代码:

1
2
3
4
5
6
<h2>User Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>

更新 URL 配置

accounts/urls.py 中添加登录视图的 URL:

1
2
3
4
5
6
7
from django.urls import path
from .views import register, user_login

urlpatterns = [
path('register/', register, name='register'),
path('login/', user_login, name='login'),
]

测试功能

现在,你的 Django 应用已经实现了用户注册与登录的基本功能。确保你的数据库迁移已经完成:

1
python manage.py migrate

然后,启动开发服务器并测试注册和登录功能:

1
python manage.py runserver

访问以下 URL 来进行测试:

  • 注册页面: http://127.0.0.1:8000/accounts/register/
  • 登录页面: http://127.0.0.1:8000/accounts/login/

总结

在本节中,我们实现了 Django 中的用户注册与登录功能。通过使用 Django 的 User 模型和 AuthenticationForm,我们的工作变得轻松而高效。你可以进一步扩展功能,比如添加邮箱验证、密码重置等,实现更复杂的用户管理系统。