Ajax ve CBV için Doğru Senaryo Nedir?

Herkese merhabalar amatörce kodladığım bir proje var bitti fakat aklıma takılan güvenlik ve stabilizasyon konusunda bazı noktalar var.
Sayfa ilk GET request edildiğinde CBS ile renderlanıyor. Daha sonra sayfa içinde bir tane select ve buna bağlı sayfalama düğmeleri var select ve sayfalama düğmelerine tıklandığında ajax ile aynı CBS içinde veri çekiyorum kodlar aşağı performans ve güvenlik açısında bu doğru bir kullanım şekli mi sormak istedim?
View:
class ArticleListView(FormMixin,ListView):
context_object_name = ‘articles’
template_name = ‘includes/article/article-list.html’
paginate_by = 9
form_class= PostSorguForm

def get_queryset(self):
    queryset=Article.objects.filter(published=True).order_by('created_date').reverse()
    if self.request.GET.get("sorgu_form"):
        selection = self.request.GET.get("sorgu_form")
        if selection == "2":
            queryset = Article.objects.filter(published=True).order_by('-hit_count_generic__hits')
        else:
            queryset=Article.objects.filter(published=True).order_by('created_date').reverse()
    return queryset

def dispatch(self, request, *args, **kwargs):
    """Updates the keyword args to always have 'foo' with the value 'bar'"""
    if request.is_ajax():
        data = {'html':'','page':''}
        sorgu_form = int(request.GET.get("sorgu_form"))
        if sorgu_form == 2:
            articles = Article.objects.filter(published=True).order_by('-hit_count_generic__hits')
        else:
            articles=Article.objects.filter(published=True).order_by('created_date').reverse()
        paginator = Paginator(articles, 9) # Show 9 contacts per page.
        page_number = request.GET.get('page')
        page_obj = paginator.get_page(page_number)
        html = render_to_string('includes/article/books.html', {'articles': page_obj},request=request)
        page = render_to_string('includes/article/pagination.html',{'page_obj': page_obj},request=request)
        data.update({'html':html})
        data.update({'page':page})
        return JsonResponse(data=data)
        
    return super().dispatch(request, *args, **kwargs)

ajax kodum
function sayfalama() {
$(".pagination li").click(function(e) {
e.preventDefault()
var $this = $(this);
var $books = document.getElementById(“books”);
var $pagination = document.getElementById(“pagination”);
var e = document.getElementById(“id_sorgu_form”);
var $value = e.options[e.selectedIndex].value;
var data = {sorgu_form:$value}
var $url = “{{ request.path }}” +"?"+ $(this).children(“a”).attr(“ahref”);
$.ajax({
url: $url,
type: ‘get’,
dataType: ‘json’,
data:data,
error: function (request, error) {
console.log(arguments);
alert(" Can’t do because: " + error);
},
success: function (data) {
$(’#pagination’).html(data.page);
$(’#books’).html(data.html);
$(’#pagination2’).html(data.page);
document.getElementById(“zipla”).scrollIntoView({behavior: ‘smooth’});

    }
      });

});
};