我想用Django框架构建一个项目,它包括网站和移动应用程序,网站是基于Django模板构建的,移动应用程序需要休息api。我怎么能只用一个源代码副本呢?
换句话说,我可以创建一个项目,其中有几个django应用程序,它支持返回移动应用程序的渲染模板和json吗?
我知道我们可以在网站中使用Angular JS,然后使用Django-Rest-Framework访问网站和移动应用程序访问api。但我不知道Angular JS,我没时间学习它。
请帮忙。
答案 0 :(得分:4)
如果您利用HTTP标头的强大功能,这很容易实现,特别是说" Content-Type"头 (HTTP 1.1 headers specification)
我个人使用它的方式是这样的:
def my_view_name(request):
if 'CONTENT_TYPE' in request.META and \
request.META['CONTENT_TYPE'] == 'application/json':
return HttpResponse(
json.dumps({"foo":"bar"}),
content_type='application/json'
)
else:
return render_to_response(
'sometemplate.html', context
)
上面的代码是django特有的。
它允许您根据客户端传入的内容控制服务器执行何种响应。它可以通过检查Content-Type
标头来检测是否需要JSON响应。
只需确保您的移动应用在Content-Type
标头设置为application/json
希望这是你想要的。
答案 1 :(得分:0)
您可以在一个项目中完成。拥有相同的模型,但对网站和REST-api有不同的观点。
答案 2 :(得分:0)
您可以构建一个公共后端来为您的数据提供服务。
你可以在没有Django-rest-Framework的情况下做到这一点(不必使用angular)。 你只是打电话给后端的网址。
例如,。假设后端代码运行在127.0.0.1/8000,你需要获取用户的详细信息,你只需要从移动应用程序或任何其他前端调用url 127.0.0.1:8000/get_user_details/。
请养成形成/安排用不同功能编写的数据的习惯,以便移动应用程序和网站都能重复使用。(请参阅下文)
### For browser website written in DJANGO (served in template by django):
def user_details_page(request):
get_user_details(someid) #### returns json of user details
render in template
#### And for the mobile App you could use **get_user_details(someid)** just to get json data.
def get_user_details(someid):
###do watever
return json ## of user details
您还可以使用Django Rest Framework(无需使用角度),它可以为您提供很多稳定性。
或者您可以在Django Framework中设置一个全新的后端来为移动应用程序提供数据。