Django CRUD教程:通用视图

分享于 

9分钟阅读

django

  繁體

您将学习使用DjangoGeneric视图(如ListView,DetailView,CreateView,UpdateView和DeleteView)快速创建CRUD视图。

CRUD代表创建,读取,更新和删除,在大多数Web应用程序中与数据库中的数据进行交互的常用操作。它基本上提供了一个CRUD接口,允许您的用户在数据库(如MySQL,PostgreSQL或Oracle等)中创建,读取,更新和删除数据。

创建和激活虚拟环境

在使用新的python项目时,建议为项目的包创建一个虚拟和独立环境,在python 3.7中,可以使用venv模块创建虚拟环境。

转到终端,并运行以下命令:


$ python -m venv env

创建名为env的虚拟环境。

接下来,你需要使用source命令激活环境:


$ source env/bin/activate

安装Django,并创建一个新项目

使用Django 2安装到虚拟环境中,使用pip


$ pip install django

接下来,使用django-admin.py创建一个新项目:


$ django-admin.py startproject django_crud_cbv

创建新应用程序

现在,在Django项目中创建一个新应用程序,在项目的文件夹中导航,并运行以下命令:


$ cd django_crud_cbv
$ python manage.py startapp contacts

这将创建一个contacts的应用程序。

你需要将此应用程序添加到项目中,打开settings.py文件并将contacts添加到INSTALLED_APPS数组:


INSTALLED_APPS = ( 
 # [...]
 'contacts',
 )

创建模型,并迁移数据库

创建contacts应用程序后,你需要一个表示数据库中的联系人的模型,打开contacts/models.py文件,并添加以下代码:


from django.contrib.gis.db import models

class Contact(models.Model):
 name = models.CharField(max_length=100)
 email = models.EmailField()
 address = models.CharField(max_length=100)
 phone = models.CharField(max_length=50)

现在,你已经定义了模型,可以迁移数据库,并运行开发服务器。

转到终端,并运行以下命令:


$ python manage.py makemigrations
$ python manage.py migrate

启用管理界面

打开contacts/admin.py文件,并注册Contact模型:


from django.contrib import admin 
from .models import Contact
admin.site.register(Contact)

你可以从http://localhost:8000/admin访问管理界面。

创建CRUD视图

使用基于Django类的通用视图来定义视图,打开contacts/views.py文件,并开始添加以下导入:


from django.views.generic import ListView, DetailView 
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from .models import Contact

现在,你可以使用ListView通用视图添加用于列出联系人的第一个视图:


class ContactList(ListView): 
 model = Contact

接下来,使用DetailView generic view类创建一个细节视图:


class ContactDetail(DetailView): 
 model = Contact

接下来,你需要添加create视图,以便使用CreateView通用视图创建联系人:


class ContactCreate(CreateView): 
 model = Contact

接下来,你需要添加更新视图,以便使用UpdateView视图更新联系人:


class ContactUpdate(UpdateView): 
 model = Contact

最后,需要使用基于DeleteView类的通用视图添加删除联系人的删除视图:


class ContactDelete(DeleteView): 
 model = Contact

添加模板

定义CRUD视图之后,接下来需要为每个视图添加模板,每个视图在应用程序的templates文件夹中需要一个有特定名称的模板。

contacts文件夹中,创建一个templates/contacts/文件夹,并开始添加包含以下内容的contact_list.html文件:


<h1>Contacts</h1>

<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Address</th>
<th>Phone</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for contact in object_list %}
<tr>
<td>{{ contact.name }}</td>
<td>{{ contact.email }}</td>
<td>{{ contact.address }}</td>
<td>
<a href="{% url"contact_detail" contact.id %}">details</a>
<a href="{% url"contact_edit" contact.id %}">edit</a>
<a href="{% url"contact_delete" contact.id %}">delete</a>
</td>
</tr>

{% endfor %}
</tbody>
</table>

接下来,使用以下内容创建contact_details.html文件:


<h1>Contact Details</h1>

<p>Name: {{object.name}}</p>
<p>Email: {{object.email}}</p>
<p>Address: {{object.address}}</p>
<p>Phone: {{object.phone}}</p>

接下来,创建将由update视图使用的contact_form.html文件:


<h1>Contact Update</h1>

<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

最后,你需要创建将由delete视图使用的contact_confirm_delete.html文件:


<h1>Contact Delete?</h1>
<form method="post">
{% csrf_token %}
Are you sure you want to delete this contact?
<input type="submit" value="Submit" />
</form>

添加URL

最后,你需要向已定义的视图添加各种URL,打开项目的urls.py文件,并添加以下URL:


from django.urls import path
from . import views

urlpatterns = [
 # [...]
 path('contacts', views.ContactList.as_view(), name='contact_list'),
 path('contact/<int:pk>', views.ContactDetail.as_view(), name='contact_detail'),
 path('create', views.ContactCreate.as_view(), name='contact_create'),
 path('update/<int:pk>', views.ContactUpdate.as_view(), name='contact_update'),
 path('delete/<int:pk>', views.ContactDelete.as_view(), name='contact_delete'),
]

最后,您可以使用以下命令运行开发服务器:


$ python manage.py runserver

然后可以从http://localhost:8000/contacts/访问CRUD接口


BASE  VIEW    教程  generic  查看  
相关文章