在完成前兩天的前置作業後,之後將繼續進行django的網站實作,接下來預計花大約2-3天的時間,完成將小說加入追蹤清單的功能。
因為時間關係,今天主要先完成程式雛形作為紀錄,細部功能先暫時留空待之後再補,且今天的程式尚未完成測試,故實際執行上可能會出問題。
今天預計進行的範圍如下:
於應用程式資料夾下新增forms.py檔案。
新增 TrackBookForm類別。
from django import forms
from django.core.exceptions import ValidationError
class TrackBookForm(forms.Form):
oriurl = forms.URLField(required=True, help_text="輸入小說主頁的網址", label="網址" )
def clean_oriurl(self):
data = self.cleaned_data['oriurl']
# 判斷data是否在支援的網站範圍內 (待補)
support = True
if support:
raise ValidationError(_('網址不支援'))
else:
return data
forms.URLField():建立HTML可輸入的URL欄位。
clean_<fieldname>():在此方法下實作資料檢核。
開啟應用程式目錄下的views.py。
新增 TraceBook()方法,主要邏輯如下:
如果HTTP要求為POST,表示為新增資料,需先檢查該作者是否已建檔,如未建檔需先於Author新增資料後,再新增Book。
如果HTTP要求為GET(或其他),表示為表單尚未送出狀態(包含初次開啟頁面),故回傳初始表單。
from .models import Book, Author
from .forms import TrackBookForm
def TrackBook(request):
# If this is a POST request then process the Form data
if request.method == "POST":
form = TrackBookForm(request.POST)
if form.is_valid():
# 取得相關資訊(待補)
author_crawler = 'ooo'
title_crawler = 'xxx'
# 檢查作者是否存在,不存在則新增
author_exist = Author.objects.filter(authorname__iexact=author_crawler)
if author_exist:
authorid_crawler = author_exist.authorid
else:
record_author = Author(authorname=author_crawler)
author_crawler = record_author.authorid
record_author.save()
# 檢查書是否已存在
book_exist = Book.objects.filter(title__iexact=title_crawler)
if book_exist:
record_book = book_exist
else:
record_book = Book(title=title_crawler, authorid=author_crawler, oriurl=form.cleaned_data['oriurl'], isTrack=True)
record_book.save()
return render(request, 'track/track_book.html', {'form': TrackBookForm(), 'title_save': record_book.title})
# If this is a GET (or any other method) create the default form.
else:
form = TrackBookForm()
return render(request, 'track/track_book.html', {'form': form, 'title_save': None})