1. 程式人生 > >Python中Django框架巧妙的實現增刪改查

Python中Django框架巧妙的實現增刪改查

在這裡插入圖片描述
Django是Python中一個非常牛逼的web框架,他幫我們做了很多事,裡邊也提前封裝了很多牛逼的功能,用起來簡直不要太爽,在寫網站的過程中,增刪改查這幾個基本的功能我們是經常會用到,Django把這系列複雜的邏輯性東西都封裝成了方法,供我們直接使用,在使用過程中的體會是簡單到令人髮指,一個簡單的例子給大家演示一下。
在這裡插入圖片描述
首先建立一個有多對一關係關聯模型
我們假設有一個主題,主題下邊會有很多內容,然後我們將主題和內容用多對一的ForeignKey欄位關聯起來,如下:
#models.py
from django.db import models
from django.shortcuts import reverseclass Topic(models.Model):
text = models.CharField(‘主題’, max_length=100)
date_added = models.DateTimeField(‘新增時間’, auto_now_add=True) class Meta:
ordering = [’-date_added’]
verbose_name_plural = “主題” def str

(self):
return self.text
class Entry(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE, verbose_name=“主題”)
text = models.TextField(‘具體筆記’)
date_added = models.DateTimeField(‘新增時間’, auto_now_add=True) class Meta:
ordering = [’-date_added’]
verbose_name_plural = “具體知識” def str(self):
return self.text[:50] + “…”
在檢視views.py中我們使用了Django給我們提供的通用顯示檢視ListView(通用列表檢視),DetailView(通用詳情檢視)來進行資料查詢處理。
views.py

from django.views.generic import ListView, DetailView # 通用顯示檢視
from django.views.generic.edit import CreateView, DeleteView, UpdateView # 通用編輯檢視
from . import models as md
from django.urls import reverse_lazy # 增刪改成功後要跳轉的連結方法引入# 通用顯示檢視查詢列表 ListView
class TopicsList(ListView):
model = md.Topic # 屬於哪個模型
# 指定顯示的靜態模板
template_name = ‘mysite/topics.html’
# 自定義上下文變數,我們最好自己設定,覆蓋掉預設的上下文變數
context_object_name = ‘topics’
#通用顯示檢視查詢列表的詳情頁面 DetailViewclassTopicDetail(DetailView):
model = md.Topic
template_name = ‘mysite/topic.html’

接上文,在增刪改查的過程中,我們使用了Django給我們提供的通用編輯檢視來處理表單資料,CreateView(新增),UpdateView(更新),DeleteView(修改),如下:
#views.py
class TopicUpdate(UpdateView):
# 與通用顯示檢視一致,定義屬於哪個模型
model = md.Topic
# 覆蓋掉預設的檢視模板,使用我們自定義的
template_name = ‘mysite/edit_topic.html’
# 允許編輯的欄位
fields = [‘text’]
# 修改成功後跳轉的連結地址
success_url = reverse_lazy(‘mysite:topics’)
class TopicDelete(DeleteView):
model = md.Topic
template_name = ‘mysite/del_topic.html’
success_url = reverse_lazy(‘mysite:topics’)
class EntryCreate(CreateView):
model = md.Entry
template_name = ‘mysite/new_entry.html’
fields = [‘topic’, ‘text’]
success_url = reverse_lazy(‘mysite:topics’)
接著在我們urls中定義連結,注意這裡的urls.py檔案位於我們的應用中,並不是在專案中的urls.py裡,我們在專案中利用了include進行了url地址的分發,這樣做的好處,請自行了解官方文件。
#urls.py
from django.urls import path
from . import views
from .views import TopicCreate, TopicUpdate, TopicDelete, EntryCreateapp_name = ‘mysite’
urlpatterns = [
path(‘topics/’, views.TopicsList.as_view(), name=‘topics’),
path(‘topics/int:pk/’, views.TopicDetail.as_view(), name=‘topic’),
path(‘topic/add/’, TopicCreate.as_view(), name=‘topic-add’),
path(‘topic/int:pk/’, TopicUpdate.as_view(), name=‘topic-update’),
path(‘topic/int:pk/delete/’, TopicDelete.as_view(), name=‘topic-delete’), path(‘entry/add/’, EntryCreate.as_view(), name=‘entry-add’),
]
最後來看看我們的在靜態模板檔案中如何呼叫。

新增主題
{% if topics %}
{% for topic in topics %}

  • {{ topic.text }}

  • 修改
    刪除
    {% endfor %}
    {% else %}

    還沒有任何主題


    {% endif %}
    新增內容

    {{ topic }}

    {% for entry in topic.entry_set.all %}
        {{ entry.text }}
       <p>日期:{{ entry.date_added }}</p>
    {% endfor %}
    

    其他幾個靜態模板呼叫方法幾乎一樣,只需要更換action的提交地址即可,留給大家的作業了。
    #new_topic.html
    文章來自:https://www.itjmd.com/news/show-5327.html