как легко перейти от django представлений к django представлениям-каркаса - PullRequest
0 голосов
/ 03 марта 2020

Я создал хорошее приложение Django, все работало отлично. К сожалению, теперь мне нужно БЫСТРО перенести все на django -rest-framework и на VUE внешний интерфейс. Я отвечаю за бэкэнд, кто-то другой напишет код внешнего интерфейса.

Проблема в том, что у меня действительно сложные Django представления, и я не могу понять, как их изменить. правильно и легко, а главное, как их тестировать без внешнего интерфейса.

Вот пример моего взгляда. Я создал приложение, которое будет искать в Google какой-либо запрос, а затем извлекать основной текст из каждой ссылки. На той же странице, где вы вставляете запрос, будут отображаться первые 10 ссылок, если вы хотите больше поработать, вам нужно go перейти на следующую страницу.

Это означает, что в том же представлении у меня есть первый QueryForm. Если строка передана, начинается очистка, если вы хотите очистить больше, то передается query_id.

def query_create (request):

form = QueryForm(request.POST)
user_p = UserProfile.objects.filter(user=request.user).first()
context={'form1':form1}
if request.method == 'POST'  :
        if form.is_valid():
            query_obj = form.save(commit=False)
            query_obj.user = user_p


            query_string=query_obj.query
            search_engine=query_obj.search_engine
            query_obj.save()
            data=multi_scraping.scrape(query_obj.search_dict, 0, 10,query_string)
            queryset=[]
            for index, row in data.iterrows():
                link = Link(scraping_id=str(query_obj),
                            isBlocked=row['isBlocked'],
                            published_Date=row['published'],
                            modified_date=row['update'],
                            language=row['language'],
                            search_engine=row['search_engine'],
                            source=row['source'],
                            source_url=row['source_url'],
                            title=row['title'],
                            transcript=row['transcript'],
                            url=row['url']
                            )
                link.save()
                queryset.append(link)
            context = {
                "object_list": queryset,
                "query_id": query_obj.query_id,
                "p":query_obj.p,
                "user":user_p
            }
            return render(request, "news/home.html", context)
if(request.POST.get('query_id', None) is not None):
    query_id=request.POST.get('query_id', None)
    query_obj=Query.objects.get(pk=query_id)
    query_string=query_obj.query
    query_obj.p=query_obj.p+10
    query_obj.save()
    data = multi_scraping.scrape(search_dict, query_obj.p, query_obj.p+10, query_string)
    queryset = []
    for index, row in data.iterrows():
        link = Link(scraping_id=str(query_obj),
                            isBlocked=row['isBlocked'],
                            published_Date=row['published'],
                            modified_date=row['update'],
                            language=row['language'],
                            search_engine=row['search_engine'],
                            source=row['source'],
                            source_url=row['source_url'],
                            title=row['title'],
                            transcript=row['transcript'],
                            url=row['url']
                            )
        link.save()
        queryset.append(link)
    context = {
        "object_list": queryset,
        "query_id": query_obj.query_id,
        "p": query_obj.p,
        "user": user_p
    }

    return render(request, "news/home.html", context)

У вас есть идеи, как помочь? все будет оценено !!!!!

1 Ответ

0 голосов
/ 03 марта 2020

Поскольку вы собираетесь использовать vue. js в качестве внешнего интерфейса с django бэкэндом так что, вероятно, вам нужно сделать остальные API для того же.
Теперь django Comeup с отличными функциями, которые включают в себя остальные API, но вы должны создать ваши представления API, которые должны быть сериализованы, так что результирующие остальные API имеют формат Json или xml.
В вашем случае вам необходимо преобразовать представления, поэтому сначала необходимо преобразовать ваши представления в django rest сериализованный формат. Таким образом, вы можете обработать запрос, поступающий из внешнего интерфейса.

Предположим, ниже приведена ваша модель:

class User(models.Model):
    username = models.CharField(max_length=200)
    created_at = models.DateTimeField(default=timezone.now)

Итак, теперь , чтобы получить все данные о пользователях, вы должны сериализовать объект пользователя:

class UserSerializers(serializers.ModelSerializer):
    class Meta:
        model = User
        fields='__all__'

Ваши выходные данные json выглядят так:

[
    {
        "id": 37,
        "username": "kevin morgan",
        "created_at": "2020-02-02T16:26:16.779900Z"
    },
    {
        "id": 38,
        "username": "john smith",
        "created_at": "2020-02-02T16:43:04.242829Z"
    }
]

Вы можете прочитать здесь больше info

...