在完成前两天的前置作业後,之後将继续进行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})
<<: 【Day10】表单 Form:受控元件 Controlled Component
这一个章节节我们要来介绍复合查询,当单一的查询子句无法完成需求时,为了应付这种高级查询需求,所以就产...
Tasks: Initialize Cloud Monitoring. Navigation men...
今天要学习的是观察者模式,它主要的作用是设定一个订阅机制,当被订阅的物件有发生事件时就会去通知所...
今日目标 合并iron_window与iron_render 制作DrawLine用来画辅助线 为什...
前言 讯号灯做了差不多,剩下就是整合性作业,这边会说明之後的作法与规划。 整合 之前都是把各个讯号灯...