python script returns The view website.views.buttonclick2 didn't return an HttpResponse object. It returned None instead

Viewed 47

I am using django. I have added the below function into my views.py file. When i first start vs code the holehe GUI executes and the window pops up for me to enter text. However when I start the server and click the button on the holehe HTML page I receive the error "The view website.views.buttonclick2 didn't return an HttpResponse object. It returned None instead."

I have tried adding at the bottom return render(request, 'holehe.html') however this doesnt work.

Please can someone advise where I am going wrong ?

def buttonclick2(request):
    if request.method == "POST":
        return 
                
def compile_terminal_command(terminal_command, last_line_index) :
                

    # The last line index stores the line where the command thread has to output in the 
     listbox
    # since the listbox may have also received more commands in that span and the thread may 
    take
    # some time to give output
    
    command_summary = terminal_command.split(' ') # Split the command and args.
    os.environ["PYTHONUNBUFFERED"] = "1" # MAKE SURE THE PREVIOUS OUTPUT IS NOT RECIEVED
    
    # > We use the subprocess module's run method to run the command and redirect output and 
     errors
    # to the pipe from where we can extract it later.
    # > I will suggest running this with shell = True since that was the way it was working 
    for me and was
    # not working with shell = False for some reason.
    # > Also the current working directory argument can be passed but did not work in my case 
    where i set
    # the current working directory to the system drive C: in my case and put a python file 
     there
    # when I ran the file it did not run and picked up my local directory and not the C:
    result = subprocess.run(command_summary, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, `shell = True, env = os.environ)`
    
    output = result.stdout
    # To make sure we print output line by line and not in one single line we use splitlines.
    output_lines = output.splitlines()
    for k in output_lines :
        terminal_listbox.insert(last_line_index, k)
        last_line_index += 21 # Increases line index to make sure output is printed line by line.
    
    return
 
def refresh_terminal(backspace = False) :
    # refreshes the terminal when a change is done to terminal by the user.
    global terminal_text
    
    if terminal_text != '>>holehe ' or backspace :
        terminal_listbox.delete(tk.END)
    terminal_listbox.insert(tk.END, terminal_text)
    return
 
def append_to_terminal_text(text) :
    # can append a single character or more to the terminal
    global terminal_text
    
    terminal_listbox.delete(tk.END)
    terminal_text = terminal_text + text
    terminal_listbox.insert(tk.END, terminal_text)
    terminal_listbox.yview_moveto(1)
    return
 
def terminal_enter_key_callback() :
    global terminal_text
    
    # The thread that compiles the output is run in background to make sure it does not hang the
    # program or does not stop the terminal incase the output is taking time to be generated.
    compiler_thread = threading.Thread(target = compile_terminal_command, args = (terminal_text[3 : ], terminal_listbox.size()))
    compiler_thread.daemon = True
    compiler_thread.start()
    
    terminal_text = '>> ' # Resetting the terminal_text variable that stores the text of the current line of the terminal.
    
    terminal_listbox.insert(tk.END, terminal_text) # Insert the terminal text(basically a new line in this case) to the terminal listbox.
    terminal_listbox.yview_moveto(1) # scrolls down the listbox down to the very last.
    return
 
def type_to_terminal(string) :
    # types a given string automatically to the terminal.
    for k in string :
        append_to_terminal_text(k)
    
    terminal_listbox.yview_moveto(1)
    return
 
def terminal_backspace_callback() :
    # callback for backspace key erases the last character.
    global terminal_text
    
    if len(terminal_text) > 3 :
        terminal_text = terminal_text[ : -1]

    refresh_terminal(backspace = True)
    return
 
root = tk.Tk()
root.title('GAEN - holehe command line GUI')
root.geometry('800x800')
 
# Making a frame, this terminal frame can be packed or used as a toplevel window instead.
terminal = tk.Frame(root, bg = 'black')


 
# Initializing a listbox to act as terminal with bg and fg of your own choice.
# NOTE:  in the listbox to make it so the selection of listbox items is not visible
# I have changed the highlight color and select color to background color and also have set
# the active style i.e. the style used to display a selection to tk.NONE, and have also set
# the highlight thickness to 0.
terminal_listbox = tk.Listbox(terminal, bg = 'black', fg = 'white', highlightcolor = 'black', highlightthickness = 0, selectbackground = 'black', activestyle = tk.NONE)
terminal_scrollbar = tk.Scrollbar(terminal)
terminal_scrollbar.pack(side = tk.RIGHT, fill = tk.Y)
 
# packing and stuff.
terminal_listbox.pack(expand = True, fill = tk.BOTH)
terminal.pack(expand = True, fill = tk.BOTH)
 
# Inserting the copyright thingy.
terminal_listbox.insert(tk.END, 'Terminal for holehe')
terminal_listbox.insert(tk.END, 'By GAEN')
terminal_listbox.insert(tk.END, '')
terminal_listbox.insert(tk.END, '')
terminal_listbox.insert(tk.END, 'To use type: holehe email@address')
terminal_listbox.insert(tk.END, 'Press enter')
terminal_listbox.insert(tk.END, 'wait a moment......')
terminal_listbox.insert(tk.END, '')
terminal_listbox.insert(tk.END, '')
terminal_listbox.insert(tk.END, '+ sign means email address on that site')


# Intializes the terminal text for the first line.
terminal_text = '>>holehe_ '
 
# Assigns a scrollbar to the terminal.
terminal_listbox.config(yscrollcommand = terminal_scrollbar.set)
terminal_scrollbar.config(command = terminal_listbox.yview)
 
# THE FIRST EVER INSERTED ITEM DOES NOT APPEAR SO THIS IS A BUFFER ITEM TO FILL THAT SPOT

terminal_listbox.insert(tk.END, '')
terminal_listbox.insert(tk.END, '')
 
append_to_terminal_text('') # Buffer.

 
# SETTING UP BINDINGS FOR ENTER AND BACKSPACE CALLBACKS WITH THEIR RESPECTIVE KEYS
terminal_listbox.bind('<Return>', lambda x : terminal_enter_key_callback())
terminal_listbox.bind('<BackSpace>', lambda x : terminal_backspace_callback())
 
# SETTING UP KEYBOARD INPUT FOR A LISTBOX HARDCODINGLY.
terminal_listbox.bind('a', lambda x : append_to_terminal_text('a'))
terminal_listbox.bind('b', lambda x : append_to_terminal_text('b'))
terminal_listbox.bind('c', lambda x : append_to_terminal_text('c'))
terminal_listbox.bind('d', lambda x : append_to_terminal_text('d'))
terminal_listbox.bind('e', lambda x : append_to_terminal_text('e'))
terminal_listbox.bind('f', lambda x : append_to_terminal_text('f'))
terminal_listbox.bind('g', lambda x : append_to_terminal_text('g'))
terminal_listbox.bind('h', lambda x : append_to_terminal_text('h'))
terminal_listbox.bind('i', lambda x : append_to_terminal_text('i'))
terminal_listbox.bind('j', lambda x : append_to_terminal_text('j'))
terminal_listbox.bind('k', lambda x : append_to_terminal_text('k'))
terminal_listbox.bind('l', lambda x : append_to_terminal_text('l'))
terminal_listbox.bind('m', lambda x : append_to_terminal_text('m'))
terminal_listbox.bind('n', lambda x : append_to_terminal_text('n'))
terminal_listbox.bind('o', lambda x : append_to_terminal_text('o'))
terminal_listbox.bind('p', lambda x : append_to_terminal_text('p'))
terminal_listbox.bind('q', lambda x : append_to_terminal_text('q'))
terminal_listbox.bind('r', lambda x : append_to_terminal_text('r'))
terminal_listbox.bind('s', lambda x : append_to_terminal_text('s'))
terminal_listbox.bind('t', lambda x : append_to_terminal_text('t'))
terminal_listbox.bind('u', lambda x : append_to_terminal_text('u'))
terminal_listbox.bind('v', lambda x : append_to_terminal_text('v'))
terminal_listbox.bind('w', lambda x : append_to_terminal_text('w'))
terminal_listbox.bind('x', lambda x : append_to_terminal_text('x'))
terminal_listbox.bind('y', lambda x : append_to_terminal_text('y'))
terminal_listbox.bind('z', lambda x : append_to_terminal_text('z'))

terminal_listbox.bind('A', lambda x : append_to_terminal_text('A'))
terminal_listbox.bind('B', lambda x : append_to_terminal_text('B'))
terminal_listbox.bind('C', lambda x : append_to_terminal_text('C'))
terminal_listbox.bind('D', lambda x : append_to_terminal_text('D'))
terminal_listbox.bind('E', lambda x : append_to_terminal_text('E'))
terminal_listbox.bind('F', lambda x : append_to_terminal_text('F'))
terminal_listbox.bind('G', lambda x : append_to_terminal_text('G'))
terminal_listbox.bind('H', lambda x : append_to_terminal_text('H'))
terminal_listbox.bind('I', lambda x : append_to_terminal_text('I'))
terminal_listbox.bind('J', lambda x : append_to_terminal_text('J'))
terminal_listbox.bind('K', lambda x : append_to_terminal_text('K'))
terminal_listbox.bind('L', lambda x : append_to_terminal_text('L'))
terminal_listbox.bind('M', lambda x : append_to_terminal_text('M'))
terminal_listbox.bind('N', lambda x : append_to_terminal_text('N'))
terminal_listbox.bind('O', lambda x : append_to_terminal_text('O'))
terminal_listbox.bind('P', lambda x : append_to_terminal_text('P'))
terminal_listbox.bind('Q', lambda x : append_to_terminal_text('Q'))
terminal_listbox.bind('R', lambda x : append_to_terminal_text('R'))
terminal_listbox.bind('S', lambda x : append_to_terminal_text('S'))
terminal_listbox.bind('T', lambda x : append_to_terminal_text('T'))
terminal_listbox.bind('U', lambda x : append_to_terminal_text('U'))
terminal_listbox.bind('V', lambda x : append_to_terminal_text('V'))
terminal_listbox.bind('W', lambda x : append_to_terminal_text('W'))
terminal_listbox.bind('X', lambda x : append_to_terminal_text('X'))
terminal_listbox.bind('Y', lambda x : append_to_terminal_text('Y'))
terminal_listbox.bind('Z', lambda x : append_to_terminal_text('Z'))
terminal_listbox.bind('1', lambda x : append_to_terminal_text('1'))
terminal_listbox.bind('2', lambda x : append_to_terminal_text('2'))
terminal_listbox.bind('3', lambda x : append_to_terminal_text('3'))
terminal_listbox.bind('4', lambda x : append_to_terminal_text('4'))
terminal_listbox.bind('5', lambda x : append_to_terminal_text('5'))
terminal_listbox.bind('6', lambda x : append_to_terminal_text('6'))
terminal_listbox.bind('7', lambda x : append_to_terminal_text('7'))
terminal_listbox.bind('8', lambda x : append_to_terminal_text('8'))
terminal_listbox.bind('9', lambda x : append_to_terminal_text('9'))
terminal_listbox.bind('0', lambda x : append_to_terminal_text('0'))
terminal_listbox.bind('.', lambda x : append_to_terminal_text('.'))
terminal_listbox.bind(':', lambda x : append_to_terminal_text(':'))
terminal_listbox.bind('@', lambda x : append_to_terminal_text('@'))
terminal_listbox.bind('-', lambda x : append_to_terminal_text('-'))
terminal_listbox.bind('_', lambda x : append_to_terminal_text('_'))
terminal_listbox.bind('?', lambda x : append_to_terminal_text('?'))
terminal_listbox.bind('=', lambda x : append_to_terminal_text('='))
terminal_listbox.bind('<slash>', lambda x : append_to_terminal_text('/'))
terminal_listbox.bind('<backslash>', lambda x : append_to_terminal_text('\\'))
terminal_listbox.bind('<space>', lambda x : append_to_terminal_text(' '))
# Not all keys have been binded here as its a demonstration but as per need all can be binded.          
                            

root.mainloop()




URLS.py

urlpatterns = [
    path('', views.index, name='index'),
    path('o2sint/', views.o2sint, name='o2sint'),
    path('Shodan/', views.Shodan, name='Shodan'),
    path('epieos/', views.epieos, name='epieos'),
    path('buttonclick', views.buttonclick,  name='buttonclick'),
    path('buttonclick2', views.buttonclick2,  name='buttonclick2'),
    path('holehe/', views.holehe,  name='holehe'),    
    path('tkinter', views.tkinter, name='tkinter'),
    path('search', views.search, name='search'),
    
    
]

HTML:

   {% extends 'base.html' %}

{% block content %}


<br /><br><br>
<h1>holehe</h1>

<hr>





<br>

<form action="{% url 'buttonclick2' %}" method="post">
    {% csrf_token %}
    <button class="btn btn-primary" type="submit" name="holehe">holehe</button>
</form>


<script>
    setTimeout("location.reload(true);", 5000);
</script>

{% endblock %}
1 Answers

when you click on "holehe" button, it'll go to your buttonclick2 function, but this function doesn't return any http response. This is why you are getting this error.

def buttonclick2(request):
    if request.method == "POST":
        return render(request, 'holehe.html')

    return render(request, 'any_other_page.html')

This code block should work, you might face other error depending your project code, but it'll solve "The view website.views.buttonclick2 didn't return an HttpResponse object. It returned None instead."

Related