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

Python中Django框架巧妙的實現增刪改查
Django是Python中一個非常牛逼的web框架,他幫我們做了很多事,裏邊也提前封裝了很多牛逼的功能,用起來簡直不要太爽,在寫網站的過程中,增刪改查這幾個基本的功能我們是經常會用到,Django把這系列複雜的邏輯性東西都封裝成了方法,供我們直接使用,在使用過程中的體會是簡單到令人髮指,一個簡單的例子給大家演示一下。
Python中Django框架巧妙的實現增刪改查

首先創建一個有多對一關係關聯模型

我們假設有一個主題,主題下邊會有很多內容,然後我們將主題和內容用多對一的ForeignKey字段關聯起來,如下:

#models.py
from django.db import models
from django.shortcuts import reverse
class 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'

#通用顯示視圖查詢列表的詳情頁面 DetailView
class TopicDetail(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, EntryCreate
app_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 }}

    日期:{{ entry.date_added }}

    {% endfor %} 其他幾個靜態模板調用方法幾乎一樣,只需要更換action的提交地址即可,留給大家的作業了。 #new_topic.html
    {% csrf_token %} {{ form }}
    文章來自:https://www.itjmd.com/news/show-5327.html
    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章