Я хочу создать проект с помощью фреймворка Django, он включает веб-сайт и мобильное приложение, веб-сайт построен на основе шаблона Django, а мобильному приложению нужен rest api. Как я могу сделать это с помощью только одной копии исходного кода?

Другими словами, могу ли я создать один проект, в котором есть несколько приложений django, он поддерживает возврат как шаблона рендеринга, так и json для мобильного приложения?

Я знаю, что мы можем использовать Angular JS на веб-сайте, тогда как веб-сайт, так и мобильное приложение получают доступ к rest api с помощью Django-Rest-Framework. Но я понятия не имею об Angular JS, и у меня нет времени изучать его.

Пожалуйста помоги.

-1
JordanChina 6 Янв 2016 в 07:21

3 ответа

Лучший ответ

Этого легко добиться, если использовать всю мощь заголовков HTTP, в частности заголовок Content-Type. (спецификация заголовков HTTP 1.1)

Я лично использую это примерно так:

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.

Он позволяет вам контролировать, какой тип ответа выдает сервер, в зависимости от того, что передает клиент. Он может определить, что требуется ответ JSON, проверив заголовок Content-Type. Просто убедитесь, что ваше мобильное приложение отправляет свои HTTP-запросы с заголовком Content-Type, установленным на application/json.

Надеюсь, ты этого хотел.

4
Cajetan Rodrigues 6 Янв 2016 в 07:13

Вы можете создать один общий сервер для обслуживания ваших данных.

И вы можете сделать это без Django-rest-Framework (без использования angular). Вы просто собираетесь позвонить по URL-адресу серверной части.

Например,. Допустим, внутренний код работает на 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 (без использования angular), это дает вам большую стабильность.

Или вы можете настроить совершенно новый бэкэнд в Django Framework для обслуживания данных для мобильного приложения.

0
SuperNova 6 Янв 2016 в 06:49

Вы можете сделать это в одном проекте. У вас одна и та же модель, но разные представления для веб-сайта и REST-api.

0
shpasta 6 Янв 2016 в 06:49