提前谢谢!这是一个“哲学”问题,而不是对代码的直接要求,尽管我将非常感谢任何人对代码示例的投入。
只要我记得我就一直是“传统”开发人员,现在我是专业的数据科学家。话虽如此,我从未真正接触过的一个领域是Web开发。
对于我正在从事的项目,我需要构建(并在一定程度上加快时间)一个外观良好的Web应用程序,该应用程序的功能与Wiki网站有些相似(在这里不能使用MediaWiki之类的现有代码库,因此,假设一切都必须从头开始。
在尝试以“正确的方式”做事时,我将事情设置如下:
这里剩下的最重要的部分显然是前端。我试图向几个朋友和熟人寻求建议,并指出了Bootstrap的方向。
我承认,从这里开始,我有点卡住了。
我在Django docs上看到了不涉及任何Javascript的示例(看起来,HTML页面可以通过最小的提升直接与数据库进行交互,只需使用一个非常简单的“ insert-placeholder-这里的逻辑,因为我已经通过Django模型进行了设置)。我看到了类似的构造here和here。
但是随后我在网络上看到whole other set of instruction,内容涉及如何制作功能性的Web应用程序-为Django模型创建序列化器以JSON,构建REST api,使用Javascript和使用库编写前端页面逻辑导入Javascript以与手动构建的API交互以与后端交互。
现在,当然,“第一种”方法似乎要简单得多。第二种感觉就像是重新发明轮子-如果我可以简单地使用类似{{ num_books }}
的结构,为什么我要去构建所有这些API并担心JSON?但是我感到困惑。有长期思考的“正确”选择吗?似乎我可以找到使用Bootstrap和其他采用这两种方法的框架的人。除非采用JSON / API方法,否则是否可以使用Javascript代码?这有关系吗?真正的区别是什么?
在波涛汹涌的海洋中使用指南针将不胜感激。当然,我不能成为第一个尝试使用Django构建功能性Webapp的人……前端对我来说完全陌生。
谢谢大家!
答案 0 :(得分:1)
一旦您要在前端中包含动态部分,就需要使用Javascript。为了加快开发速度,我强烈建议使用Vue
,React
或Angular
之类的框架。他们有数十种工具可用于项目中的特定需求。另外,在使用Javascript时,您可能还会研究jQuery
。
我目前正在自己构建Django Web应用程序(开始于3个月前)。我经常使用Javascript来处理Django呈现的模板。
为什么Django是您的正确选择
关于Django的妙处是Model-View-Template
架构,我认为这是wiki app
的绝佳框架。您请求一个http,Django触发链接的view-function
并呈现template
-等等!而且,如果您需要从PostgreSQL传输数据到PostgreSQL,则只需构建一个model
并将数据调用包含在view-function
中即可使用前端的数据。
django-admin
)由于这是一个广泛的问题,希望我能为您提供一些有关如何进行开发的提示。但是,请随时对这篇文章发表评论,以获取更多疑问。
为了让您有一个简短的感觉,我将使用基本的HTML,CSS和Javascript以及Django作为基于python的后端,附加一些当前项目的片段。
答案 1 :(得分:1)
首先,Django是一个框架,这意味着它已经包含了大多数人需要的预定义的必要功能集,有时人们会说“含电池”。
在发明REST架构之前,前端和后端是紧密相关的。它们之间没有直线,很难与其他服务共享业务逻辑。
基本上我们可以说有两个 选项,如何使用Django组织前端和后端工作流程:
最简单,最简单的入门方法。您需要的所有内容已经在Django中介绍过。让我们看一个简单的例子:
views.py
def index(request):
fruits = Fruit.objects.all()
render(request, 'index.html', {'fruits': fruits})
然后,您可以在模板中使用上下文中的变量,如下所示:
index.html
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
如果默认模板引擎不适合您的需求,则Django模板系统确实功能强大且可自定义,可以选择另一个模板引擎,例如Jinja。
您可以在那里做很多工作,但是作为一般建议,所有“计算”工作都不应存储在模板级别,因为这会大大增加页面的渲染时间。放置业务逻辑的最佳位置是视图和custom managers上数据库的大部分工作。
对于应用程序的动态部分,可以使用JQuery库中的AJAX
。
使用forms也很简单,默认情况下Django使用csrf
保护。默认的validators和model forms给您真正的力量。
使用模板时,它们依赖于模板,很可能无法在其他地方重用端点,这就是为什么需要REST的原因。 Django有一些功能可以为您提供帮助,最终您可能会使用django-rest-framework,这是Django目前最受欢迎的库之一。
尽管有ModelViewSet,但上面的示例看起来像这样,它可以为您完成大部分样板工作:
class FruitViewSet(viewsets.ViewSet):
def list(self, request, *args, **kwargs):
fruits = Fruit.objects.all()
ser = FruitSerializer(fruits, many=True)
if not ser.is_valid():
return Response({}, status=status.HTTP_400_BAD_REQUEST)
return Response(ser.data, status=status.HTTP_200_OK)
您可以使用ModelSerializer或编写自己的序列化器。验证过程简单明了:
class FruitSerializer(serializers.ModelSerializer):
def validate(self, attrs):
# validate your data here
pass
class Meta:
model = Fruit
fields = '__all__'
要在网页上显示此数据,您可以使用任何常用的JavaScript或支持REST的javascript框架(今天最流行):React,Angular,Vue
通过REST
,您可以为Web,移动应用程序等使用相同的API。最后,实现一次随处使用。