Как структурировать представления для извлечения и манипулирования базой данных - PullRequest
0 голосов
/ 26 марта 2019

Мне трудно понять, как лучше структурировать свои взгляды.Я собираю данные о различных пользователях и создаю переменные, которые суммируют некоторые из этих переменных (например, количество событий в неделю и т. Д.).Это так, чтобы я мог отобразить эти сводные переменные в моих шаблонах.Я делаю довольно много разных манипуляций, которые становятся довольно грязными, и мне понадобятся эти манипуляции для других шаблонов.Может кто-нибудь порекомендовать, как лучше структурировать представления в этом случае.Я думаю, что использование классов - это решение использовать те же функции для других шаблонов, но я не совсем понимаю, как.Я также считаю, что должен быть лучший способ структурировать каждую манипуляцию данными базы данных.

def dashboard(request):

    posts= Post.objects.filter(user=request.user)
    posts_count = posts.count()
    post_early = Post.objects.filter(user=request.user).earliest('date')   #need to extract the date value from this so I can take the difference

    total_days = (datetime.datetime.now().date()- post_early.date).days

    average_30days= round((posts_count/total_days)*30,2)

    list4=[]
    list5=[]
    i=1
    time3=datetime.datetime.now() + datetime.timedelta(-30)

    while i<32:

        list4.append(days2(time3,request,Post))
        list5.append(time3.strftime('%b %d, %Y'))
        i+=1
        time3=time3 + datetime.timedelta(+1)

1 Ответ

0 голосов
/ 26 марта 2019
def dashboardView(request):
    posts = Post.objects.filter(user=request.user)
    posts_count = posts.count()
    #need to extract the date value from post_early so I can take the difference
    post_early = Post.objects.filter(user=request.user).earliest('date')   
    total_days = (datetime.datetime.now().date() - post_early.date).days
    average_30days = round((posts_count/total_days)*30,2)
    list_4 = []
    list_5 = []
    i = 1
    time_3=datetime.datetime.now() + datetime.timedelta(-30)

    while i<32:
        list_4.append(days2(time_3, request, Post))
        list_5.append(time_3.strftime('%b %d, %Y'))
        i += 1
        time_3 = time_3 + datetime.timedelta(1)

Я бы сделал что-то подобное.Было несколько несоответствий:

- сохранять пробел перед и пробел после операторов (=, *, -, +, ...).

-Я бы посоветовалвсегда суффикс -Просмотр ваших представлений, но это просто личное предпочтение

-Используйте пустые строки для разделения блоков кода, а не групп переменных.Если у вас длинный список объявлений переменных (не в этом случае), вы можете использовать комментарии для их разделения и категоризации.

-Используйте list_3 вместо list3 (и аналогичных случаев), это более читабельно.

Более подробную информацию вы всегда можете найти в официальном руководстве по стилю Python: https://www.python.org/dev/peps/pep-0008/

В любом случае, если вы будете последовательны и достигнете стиля кодирования, используемого в документации Django во время обучения, у вас все будет хорошо.

##### EDIT:

Примечание: мой ответ основан на предоставленном вами коде, который выглядит как вырезанный (без оператора возврата?) И без других модулей.

Вы используетефункциональное представление, которое не является неправильным или правильным, просто один из возможных вариантов.Если вам это не нравится или вы хотите попробовать что-то еще, вам может подойти ListView: https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/

Пример:

from django.views import ListView

class DashboardView(ListView):
    model = Post

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['posts'] = Post.objects.filter(user=request.user)
        # add all the data you need to the context dictionary
    return context
...