正常情况,我们都是应该采用 django 的表单处理 form 数据,有时候为了方便会直接 从 前端表单 获取 form 数据而不使用 django 的 表单验证。
一. 使用了 django 表单 处理数据
# forms.py(以本站 添加友情链接 为例子)
from django import forms
from django.forms.widgets import TextInput
from blog.models import FriendsURL
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4549.400 QQBrowser/9.7.12900.400"
}
web_error_status = [500, 502, 503, 400, 404]
class FriendsURLForm(forms.ModelForm):
signer_value = forms.CharField()
def clean_site_link(self):
site_link = self.cleaned_data.get("site_link").strip()
try:
req = requests.get(site_link, headers=headers, timeout=5)
if req.status_code in web_error_status:
logger.info("友情链接打开失败:%s" % site_link)
raise forms.ValidationError("网站链接无法连接,请检查网站链接填写是否正确")
else:
logger.info("友情链接打开成功:%s" % site_link)
return site_link
except Exception as e:
logger.error(e)
raise forms.ValidationError("网站链接无法连接,请检查网站链接填写是否正确")
class Meta:
model = FriendsURL
fields = ['name', 'contact', 'site_name', 'site_link', 'site_description']
widgets = {
'name': TextInput(attrs={'placeholder': '怎么称呼您'}),
'contact': TextInput(attrs={'placeholder': '邮箱和网站链接与上次一致时可以修改其他信息'}),
'site_name': TextInput(attrs={'placeholder': '友情链接显示名称,认真填写哦'}),
'site_link': TextInput(attrs={'placeholder': '邮箱和网站链接与上次一致时可以修改其他信息'}),
'site_description': TextInput(attrs={'placeho