Search code examples
javascriptdjangodjango-viewspython-requestsfetch

Django views and requests


How can I catch and process arbitrary request in Django view?

For example:

def index(request):
    template_name = 'index.html'
     
    users = User.objects.all()

    return render(request, template_name, {'users': users})

The request parameter here is responsible only for loading the index page, am I right? But how do I process an arbitrary request from front-end, for example, my view has got the data from the database. I need to transfer it to front-end part of my app. How can I do it? Without using context.

The request from JS:

fetch('index.html', {
method: 'GET',
}).then(response => response.json()).then(data => console.log(data))

Solution

  • You can use request.session.

    For example:

    def index(request):
        template_name = 'index.html'
     
        users = User.objects.all()
        request.session["users"] = users #add users list to request.session dict. 
    
        return render(request, template_name)
    
    def alluser(request):
        template_name = 'profile.html'
        if request.session["users"]:
            return render(request, template_name)
        else:
            return redirect('/index')
    

    First, you need to go to the views page, extract all users from the database once, and print them on "request.session". You can then show this information on any page with "request.session".

    When you enter to alluser page, you can show users information with {{request.session.users}}