django实现批量xml导入到数据库,并在前端页面展示
时间: 2023-05-18 21:05:45 浏览: 136
1. 创建模型
首先,我们需要创建一个模型来存储 XML 数据。假设我们要导入的 XML 数据如下:
```xml
<books>
<book>
<title>Python for Beginners</title>
<author>John Smith</author>
<published_date>2020-01-01</published_date>
</book>
<book>
<title>Python Advanced Techniques</title>
<author>Jane Doe</author>
<published_date>2020-02-01</published_date>
</book>
</books>
```
我们可以创建一个 `Book` 模型来存储这些数据:
```python
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
```
2. 创建表单
接下来,我们需要创建一个表单来上传 XML 文件。我们可以使用 Django 的 `forms` 模块来创建表单。在 `forms.py` 文件中添加以下代码:
```python
from django import forms
class UploadXMLForm(forms.Form):
xml_file = forms.FileField()
```
3. 创建视图
现在我们需要创建一个视图来处理上传的 XML 文件并将其导入到数据库中。在 `views.py` 文件中添加以下代码:
```python
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import UploadXMLForm
from .models import Book
from xml.etree import ElementTree
def upload_xml(request):
if request.method == 'POST':
form = UploadXMLForm(request.POST, request.FILES)
if form.is_valid():
xml_file = request.FILES['xml_file']
tree = ElementTree.parse(xml_file)
root = tree.getroot()
for book in root.findall('book'):
title = book.find('title').text
author = book.find('author').text
published_date = book.find('published_date').text
Book.objects.create(title=title, author=author, published_date=published_date)
return HttpResponseRedirect('/books/')
else:
form = UploadXMLForm()
return render(request, 'upload_xml.html', {'form': form})
```
在这个视图中,我们首先检查请求的方法是否为 POST。如果是 POST,我们从表单中获取上传的 XML 文件,并使用 `ElementTree` 模块解析 XML 文件。然后,我们遍历 XML 文件中的每个 `<book>` 元素,并将其存储到数据库中。最后,我们重定向到书籍列表页面。
4. 创建模板
最后,我们需要创建一个模板来显示上传表单。在 `templates` 目录下创建一个名为 `upload_xml.html` 的文件,并添加以下代码:
```html
{% extends 'base.html' %}
{% block content %}
<h1>Upload XML</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
{% endblock %}
```
这个模板继承了一个名为 `base.html` 的基础模板,并显示一个上传表单。我们使用 Django 的模板标签 `{{ form.as_p }}` 来渲染表单。
5. 创建书籍列表视图和模板
最后,我们需要创建一个视图来显示导入到数据库中的书籍列表。在 `views.py` 文件中添加以下代码:
```python
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})
```
在 `templates` 目录下创建一个名为 `book_list.html` 的文件,并添加以下代码:
```html
{% extends 'base.html' %}
{% block content %}
<h1>Books</h1>
<ul>
{% for book in books %}
<li>{{ book.title }} by {{ book.author }} ({{ book.published_date }})</li>
{% endfor %}
</ul>
{% endblock %}
```
这个模板显示了导入到数据库中的书籍列表。
6. 添加 URL 路由
最后,我们需要将视图和模板与 URL 路由关联起来。在 `urls.py` 文件中添加以下代码:
```python
from django.urls import path
from .views import upload_xml, book_list
urlpatterns = [
path('upload-xml/', upload_xml, name='upload_xml'),
path('books/', book_list, name='book_list'),
]
```
现在,我们可以通过访问 `/upload-xml/` URL 来上传 XML 文件,并通过访问 `/books/` URL 来查看导入到数据库中的书籍列表。
阅读全文