使用DJango实现动漫信息管理实现动漫信息包括标题为charfield类型,图片为ImageField,时间为datefiled 要求实现增删改功能要html代码和models代码以及url和form还有basehtml的全部代码
时间: 2024-03-18 19:40:23 浏览: 66
基于python+django学生信息管理系统设计与实现(毕设源码和毕业设计)
5星 · 资源好评率100%
好的,我会尽力回答你的问题。首先,我们需要先创建一个 Django 项目和一个应用程序。假设我们的项目名为 `anime_management`,应用程序名为 `anime`。
## models
在 `anime/models.py` 文件中,我们需要定义动漫信息的模型。根据题目要求,我们需要包含标题、图片和时间三个字段,分别使用 `CharField`、`ImageField` 和 `DateField` 类型。同时,我们还需要为模型定义一个 `__str__` 方法,用于在后台管理页面中显示对象的字符串表示。
```python
from django.db import models
class Anime(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='images/')
date = models.DateField()
def __str__(self):
return self.title
```
## form
接下来,我们需要创建一个表单类,用于在前端页面中添加、编辑和删除动漫信息。在 `anime/forms.py` 文件中,我们可以定义一个 `AnimeForm` 类,为每个字段添加必要的属性,比如 `label`、`widget` 和 `required` 等。
```python
from django import forms
from .models import Anime
class AnimeForm(forms.ModelForm):
class Meta:
model = Anime
fields = ['title', 'image', 'date']
labels = {
'title': '标题',
'image': '图片',
'date': '时间',
}
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
}
required = {
'title': True,
'image': False,
'date': True,
}
```
## views
接下来,我们需要创建视图函数,用于处理 `GET` 和 `POST` 请求。在 `anime/views.py` 文件中,我们可以定义一个 `index` 函数,用于显示所有动漫信息;一个 `add` 函数,用于添加新的动漫信息;一个 `edit` 函数,用于编辑已有的动漫信息;以及一个 `delete` 函数,用于删除动漫信息。
```python
from django.shortcuts import render, redirect, get_object_or_404
from .models import Anime
from .forms import AnimeForm
def index(request):
anime_list = Anime.objects.all()
return render(request, 'anime/index.html', {'anime_list': anime_list})
def add(request):
if request.method == 'POST':
form = AnimeForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('anime:index')
else:
form = AnimeForm()
return render(request, 'anime/form.html', {'form': form, 'action': '添加'})
def edit(request, pk):
anime = get_object_or_404(Anime, pk=pk)
if request.method == 'POST':
form = AnimeForm(request.POST, request.FILES, instance=anime)
if form.is_valid():
form.save()
return redirect('anime:index')
else:
form = AnimeForm(instance=anime)
return render(request, 'anime/form.html', {'form': form, 'action': '编辑'})
def delete(request, pk):
anime = get_object_or_404(Anime, pk=pk)
anime.delete()
return redirect('anime:index')
```
## urls
接下来,我们需要定义 URL 路由,将每个视图函数映射到相应的 URL 上。在 `anime/urls.py` 文件中,我们可以定义一个 URL 名称空间 `anime`,并使用 `path` 函数将每个视图函数与相应的 URL 进行映射。
```python
from django.urls import path
from . import views
app_name = 'anime'
urlpatterns = [
path('', views.index, name='index'),
path('add/', views.add, name='add'),
path('edit/<int:pk>/', views.edit, name='edit'),
path('delete/<int:pk>/', views.delete, name='delete'),
]
```
## templates
最后,我们需要创建 HTML 模板,用于渲染前端页面。在 `anime/templates` 文件夹中,我们可以创建一个 `base.html` 文件,用于定义页面的基本结构,比如 `head`、`body` 和导航栏等。接下来,我们可以创建一个 `index.html` 文件,用于显示所有动漫信息;一个 `form.html` 文件,用于添加和编辑动漫信息。
`base.html` 文件可以定义如下:
```html
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="{% url 'anime:index' %}">动漫信息管理</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'anime:add' %}">添加</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-3">
{% block content %}{% endblock %}
</div>
</body>
</html>
```
`index.html` 文件可以定义如下:
```html
{% extends 'anime/base.html' %}
{% block title %}动漫信息管理{% endblock %}
{% block content %}
<table class="table">
<thead>
<tr>
<th>标题</th>
<th>图片</th>
<th>时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for anime in anime_list %}
<tr>
<td>{{ anime.title }}</td>
<td><img src="{{ anime.image.url }}" style="max-width: 200px;"></td>
<td>{{ anime.date }}</td>
<td>
<a href="{% url 'anime:edit' anime.id %}" class="btn btn-primary btn-sm">编辑</a>
<a href="{% url 'anime:delete' anime.id %}" class="btn btn-danger btn-sm"
onclick="return confirm('确认要删除吗?')">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
```
`form.html` 文件可以定义如下:
```html
{% extends 'anime/base.html' %}
{% block title %}{{ action }}动漫信息{% endblock %}
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% if field|is_checkbox %}
{{ field }}
{{ field.label }}
{% else %}
{% if field|is_multiple_checkbox %}
{% for subfield in field %}
<div class="form-check">
{{ subfield }}
{{ subfield.label }}
</div>
{% endfor %}
{% else %}
{{ field }}
{% endif %}
{% endif %}
{% if field.help_text %}
<small class="form-text text-muted">{{ field.help_text }}</small>
{% endif %}
{% for error in field.errors %}
<div class="invalid-feedback">{{ error }}</div>
{% endfor %}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">提交</button>
</form>
{% endblock %}
```
好了,以上就是使用 Django 实现动漫信息管理的全部代码。希望对你有所帮助!
阅读全文