这将是一个非常基本的问题,如何将 Django 与 angularjs 集成。我已经使用 Django 开发了一个 Web 应用程序。在 views.py 中,我想使用 json 来转储我的数据来自数据库,但我不知道,或者你可以说我无法开始这个过程。我对 Angularjs 有非常基本的知识。如果你举一些例子,那么它将帮助我开始使用 Angularjs使用 Django。为了更方便,这里是我制作的示例 View 。
def userphoto(request):
user_photo = Photo.objects.get(user = request.user)
context = RequestContext(request)
ctx_dict = {'user_photo': user_photo}
return render_to_response('userena/profile_detail.html',ctx_dict,context)
这里 ctx_dict 直接渲染成一个 html 文件,但我想使用 Angularjs 渲染它们,可能使用 json 和 http get 请求来使用 Angularjs http 服务实现数据。我该怎么做?提到我是angularjs的新手。
请您参考如下方法:
你当然可以使用 django-angular,但我发现这个包太 WIP。
您应该考虑 AJAX 而不仅仅是渲染。这取决于一个问题。
我建议使用普通的 django 或添加 tastypie 或 django-rest-framework。目前,我使用普通的 Django View 。
是的,要将模型数据发送回 Angular,您应该提供数据的 JSON,您应该序列化您的模型。但!有很多问题和陷阱。首先,您不需要模型中的所有内容。因为用户可以访问一些奇怪的字段。因为您将发送太多您不在客户端使用的数据。
因此,您应该将项目数据序列化为包含所需字段的 JSON。这是我如何操作的示例:
@ajax_request
@login_required
def mydata_ajax(request):
qs = MyData.objects.all()
#add possible filters
if request.GET.get('search'):
s = request.GET.get('search')
qs = qs.filter(
Q(name__icontains=s) |
Q(email__icontains=s) |
Q(address__icontains=s) |
)
qs = qs.order_by('task_time', 'name')
#setup pagination so angular will retrieve data page by page
pages = Paginator(qs, 20)
try:
current_page = int(request.GET.get('page', 1))
except ValueError:
current_page = 1
if current_page > pages.num_pages:
current_page = 1
#get reguested page
page = pages.page(current_page)
#create response
return {
'total': pages.count,
'num_pages': pages.num_pages,
'page': current_page,
'data': [{
'id': o.id,
'name': o.name,
'email': o.email,
'address': o.address,
} for o in page.object_list]
}
首先,我使用 ajax_request装饰器,来自 django-annoying 包,用于我的 View ,它期望 View 返回列表、字典或任何其他简单数据,因此它将 automatically 序列化(转换)为 JSON。
顺便说一句,这里有一些方便的东西,例如过滤器和分页的示例。
