我正在使用 Django 1.8 构建一个新的 Web 应用程序。该应用程序有一个简单的模型,可以获取名称和网址。然后在 View 中,我有一个函数读取给定 url 的内容,然后使用 BeautifulSoup 包从中抓取一些数据,并将它们分配给该函数中的局部变量(文章名称、发布日期等)。然后我在模板中显示这些变量。
现在我想添加新功能,允许登录用户编辑这些内容。我发现了一些第三方软件包可以做到这一点,但由于这是一个教育项目,我更喜欢自己理解这样做的逻辑。
所以问题是如何让登录用户操作从 View (而不是模型字段)中的函数捕获的数据并将编辑后的数据保存在数据库中(不使用管理区域)?显然我不需要任何代码,我想知道完成这个任务的实现思路。
views.py
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})
最佳答案
我发现从如何将数据存储在数据库中开始是最简单的。从文章模型开始:
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
如果您添加管理员,就完成了。但显示和更新数据的 View 也很容易创建:
class ArticleDetailView(DetailView):
model = Article
class ArticleUpdate(UpdateView):
model = Article
注意:代码需要一些工作。您还需要编写导入、网址和模板。
最后:第三方应用程序没有任何问题。我没有 Python、Django、Requests、Beautiful Soup 等...即使这是一个学习项目,不重新发明轮子也是一件好事。尽可能地懒惰。使用适合您的工具。
关于python - 如何在Django中编辑和保存前端内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850459/