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’});
}
});
});
};