Skip to main content
 首页 » 编程设计

python之将 Django 与 Angular js 集成

2025年05月04日29insus

这将是一个非常基本的问题,如何将 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。

顺便说一句,这里有一些方便的东西,例如过滤器和分页的示例。