Form with different action buttons and request on the same page. Django

Target:
Create a form with two buttons with different actions for my ddnames.com project. Display the result on the same page.

urls.py:

urlpatterns = [
    path('', views.index, name='index'),
    path('regresult', views.regresult, name='regresult'),
    path('regget', views.regget, name='regget'),
    path('getresult', views.getresult, name='getresult'),
    path('profile', views.profile, name='profile'),
    path('profileresult', views.profileresult, name='profileresult'),
    path('addresult', views.addresult, name='addresult'),
    path('delresult', views.delresult, name='delresult'),
]

 

In views.py create 3 functions:

Blank result. Only form view.

def regget(request):
    """Homepage"""
    reslogin = ''
    res = ''
    jwtkeyvar = ''
    context = {'reslogin': reslogin, 'jwtkeyvar': jwtkeyvar, 'res': res}
    return render(request, 'webdnss/regget.html', context)

 

Handling a registration request

def regresult(request):
    email = request.GET['email']
    password = request.GET['pass']
    dictToSend = {'email': email, 'password': password}
    resp = requests.post('http://136.244.82.142:8000/register', json=dictToSend)
    if str("406") in str(resp):
        res = f'Wrong data {resp.json()}'
    elif str("201") in str(resp):
        res = 'Congrats!\n'
        respjs = resp.json()
        for key, value in respjs.items():
            res = res + f"{key} : {value}\n"
    context = {'res': res}
    return render(request, 'webdnss/regget.html', context)

 

See also  Auto update IP address via Post Query for Dynamic DNS Services UNIX

Handling an API request

def getresult(request):
    email = request.GET['email']
    password = request.GET['pass']
    dataToSend = {'username': email, 'password': password}
    resp = requests.post('http://136.244.82.142:8000/login', data=dataToSend)
    reslogin = ''
    jwtkeyvar = ''
    if str("422") in str(resp):
        reslogin = f'Wrong data {resp.json()}'
    elif str("200") in str(resp):
        reslogin = 'Congrats!\n'
        respjs = resp.json()
        for key, value in respjs.items():
            reslogin = reslogin + f"{key} : {value}\n"
        jwtkeyvar = respjs['access_token']
    context = {'reslogin': reslogin, 'jwtkeyvar': jwtkeyvar}
    return render(request, 'webdnss/regget.html', context)

 

Template code:

<div class="form-group">
        <form>
        <input type="text" name="email" placeholder="e-mail"><br><br>
        <input type="text" name="pass" placeholder="password"><br><br>
        <input type="submit" value="Register" formaction="regresult">
        <input type="submit" value="Get API" formaction="getresult">
    </form>
</div>
<div>
        {{ res|linebreaks }}
</div>
<div>
       {{ reslogin|linebreaks }}{{ jwtkeyvar }}
</div>

 

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *