python - 如何在Django中编辑和保存前端内容?

标签 python django django-forms django-views

我正在使用 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/

相关文章:

python - 如何使用 matplotlib 在同一个图上绘制多个轨迹

django - 将 Django 过滤器集应用于带注释的查询集?

python - 用 Canvas 绘制图像并使用SimpleDocTemplate

django - 如何使用 ajax 在 Django 中创建过滤的下拉选项字段?

jquery - 如何在 Django View 中使用 ajax POST 解析 json 数据

python - 使局域网中的 django 服务器可以访问

python - 使用 Python 请求,我可以将 "data"添加到准备好的请求中吗?

django - 如何在 `email` 中使用 "django-rest-framework-simplejwt"而不是 `username` 来生成 token ?

python - 使用表单访问 django 模板中的 m2m 字段值

python - Django 表单继承不起作用 __init__