Python Flask website I'm new to programming and in back-end. Right now I'm trying to learn flask, so I wrote a very simple website that currently encrypts and decrypts the message using RSA and DES.  

I feel like my app.py file is just bad and should do it much better. I mean, there're a lot of repeating code like this:  

@app.route('/rsa_encrypt', methods=['GET', 'POST'])
def RSA_enc():
    global get_form
    if request.method == "GET":
        get_form = True
        return render_template('rsa_encrypt.html', gf=get_form)
    else:
        get_form = False
        rsa = RSA(request.form.get('pt'), p=request.form.get('p'),
                  q=request.form.get('q'), e=request.form.get('e'))
        return render_template('rsa_encrypt.html', gf=get_form, rsa=rsa, gspn=gspn)


I tried to write some decorators for those routes, but they didn't work well.  

Can you take a look and tell me what should I do better? It works but I think not as well as it should.

app.py  

from flask import Flask, render_template, request, url_for, jsonify
from ciphers import RSA, DES
from prime import generate_semiprime_number as gspn

app = Flask(__name__)
get_form = None

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/rsa_encrypt', methods=['GET', 'POST'])
def RSA_enc():
    global get_form
    if request.method == "GET":
        get_form = True
        return render_template('rsa_encrypt.html', gf=get_form)
    else:
        get_form = False
        rsa = RSA(request.form.get('pt'), p=request.form.get('p'),
                  q=request.form.get('q'), e=request.form.get('e'))
        return render_template('rsa_encrypt.html', gf=get_form, rsa=rsa, gspn=gspn)

@app.route('/rsa_decrypt', methods=['GET', 'POST'])
def RSA_dec():
    global get_form
    if request.method == "GET":
        get_form = True
        return render_template('rsa_decrypt.html', gf=get_form)
    else:
        get_form = False
        ct = [int(x) for x in request.form.get('ct')[1:-1].split(',')]
        rsa = RSA(ciphertext=ct, p=request.form.get('p'),
                  q=request.form.get('q'), e=request.form.get('e'))
        return render_template('rsa_decrypt.html', gf=get_form, rsa=rsa)

@app.route('/des_encrypt', methods=['GET', 'POST'])
def DES_enc():
    global get_form
    if request.method == "GET":
        get_form = True
        return render_template('des_encrypt.html', gf=get_form)
    else:
        get_form = False
        des = DES(request.form.get('pt'), user_key=request.form.get('key'))
        return render_template('des_encrypt.html', gf=get_form, des=des)

@app.route('/des_decrypt', methods=['GET', 'POST'])
def DES_dec():
    global get_form
    if request.method == "GET":
        get_form = True
        return render_template('des_decrypt.html', gf=get_form)
    else:
        get_form = False
        des = DES(ciphertext=request.form.get('ct'), user_key=request.form.get('key'))
        return render_template('des_decrypt.html', gf=get_form, des=des)

@app.route('/gpsn', methods=['POST'])
def _gpsn():
    return jsonify({'result' : str(gspn(request.form['bits']))})


if __name__ == '__main__':
    app.run()


Other files repository. It's also hosted so you can quickly take a look.
Your main issue is (as you've already noticed) one of code repetition. Some simple helper methods here will do the trick; caveat - untested:

from flask import Flask, render_template, request, url_for, jsonify
from ciphers import RSA, DES
from prime import generate_semiprime_number as gspn

app = Flask(__name__)
get_form = None

@app.route('/')
def index():
    return render_template('index.html')

def do_rsa(encrypting):
    global get_form

    direction = 'en' if encrypting else 'de'
    tmpl = f'rsa_{direction}crypt.html'

    if request.method == 'GET':
        return render_template(tmpl, gf=True)

    kwargs = {'p': request.form.get('p'),
              'q': request.form.get('q'),
              'e': request.form.get('e')}
    if encrypting:
        rsa = RSA(request.form.get('pt'), **kwargs)
    else:
        ct = [int(x) for x in request.form.get('ct')[1:-1].split(',')]
        rsa = RSA(ciphertext=ct, **kwargs)

    kwargs = {}
    if encrypting:
        kwargs['gpsn'] = gpsn
    return render_template(tmpl, gf=False, rsa=rsa, **kwargs)

@app.route('/rsa_encrypt', methods=('GET', 'POST'))
def RSA_enc():
    return do_rsa(True)

@app.route('/rsa_decrypt', methods=('GET', 'POST'))
def RSA_dec():
    return do_rsa(False)

def do_des(encrypting):
    global get_form

    direction = 'en' if encrypting else 'de'
    tmpl = f'des_{direction}crypt.html'

    if request.method == 'GET':
        return render_template(tmpl, gf=True)

    kwargs = {'user_key': request.form.get('key')}
    if encrypting:
        des = DES(request.form.get('pt'), **kwargs)
    else:
        des = DES(ciphertext=request.form.get('ct'), **kwargs)

    return render_template(tmpl, gf=False, des=des)


@app.route('/des_encrypt', methods=('GET', 'POST'))
def DES_enc():
    return do_des(True)

@app.route('/des_decrypt', methods=('GET', 'POST'))
def DES_dec():
    return do_des(False)

@app.route('/gpsn', methods=('POST',))
def _gpsn():
    return jsonify({'result' : str(gspn(request.form['bits']))})


if __name__ == '__main__':
    app.run()