我正在使用Django 1.8构建一个新的Web应用程序。该应用程序有一个简单的模型,它获取一个名称和一个网址。然后在视图中我有一个函数读取给定url的内容,然后使用BeautifulSoup包从它中删除一些数据,并将它们分配给此函数中的局部变量(文章名称,发布日期等)。然后我在模板中显示这些变量。
现在我想添加新功能,允许登录用户编辑这些内容。我发现了一些第三方软件包可以做到这一点,但由于这是一个教育项目,我更喜欢理解这样做的逻辑。
所以问题是如何让登录用户操作从视图中的函数(而不是模型字段)捕获的数据并将编辑后的数据保存到数据库中(不使用管理区域)?显然我不想要任何代码,我想知道执行此任务的实现思路。
def detail(request, article_id):
article = get_object_or_404(Article, pk=article_id)
html = article.article_url
read = requests.get(html)
soup = BeautifulSoup(html)
title = soup.title.string
return render(request, 'detail.html', {'article': article, 'title':title})
答案 0 :(得分:2)
我发现最简单的方法就是如何将数据存储在数据库中。从文章模型开始:
def Article(models.Model):
url = models.UrlField()
title = models.CharField(max_length=200, blank=True)
html = models.TextField(blank=True)
如果给出url,我们希望标题和html被填充。写一个信号接收器来处理刮擦:
@receiver(pre_save, instance, sender=Article)
def scrape(sender, **kwargs):
if instance.url and not instance.title and not instance.html:
data = requests.get(instance.url)
instance.html = BeautifulSoup(data)
instance.title = instance.html.title.name
如果你添加管理员,你就完成了。但是,显示和更新数据的视图也很容易创建:
class ArticleDetailView(DetailView):
model = Article
class ArticleUpdate(UpdateView):
model = Article
注意:代码需要一些工作。您还需要编写导入,网址和模板。
最后:第三方应用程序没有任何问题。我不拥有Python,Django,Requests,Beautiful Soup等等......即使这是一个学习项目,也不要重新发明轮子。尽可能地懒惰。使用能够为您完成工作的工具。
答案 1 :(得分:0)