Pythonanywhere mysql

yaptığım sesli iletişim uygulamasını kullanmak için kullanıcıların önce kayıt oluşturmasını istiyorum, basit bir site yaptım. siteyi pythonanywhere de açtım database de orda olacak. ama bir türlü mysql 'i ayağa kaldıramadım.
sitem: https://emirhan.pythonanywhere.com/

from flask import Flask, render_template, request
import mysql.connector

app = Flask(__name__)
app.debug = True
# MySQL veritabanı bağlantı ayarları
db_config = {
    'host': 'XXX.mysql.pythonanywhere-services.com',
    'user': 'XXXX',
    'password': 'XXXXX',
    'database': 'emirhan$XXXX'
}

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

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

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

@app.route('/register.html', methods=['GET', 'POST'])
def register_page():
    if request.method == 'POST':
        name = request.form.get('name')
        password = request.form.get('password')

        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor()

        # Verileri eklemek için SQL sorgusu
        query = "INSERT INTO kullanici_veri (kullanici_ad,sifre) VALUES (%s, %s)"
        values = (name,password)

        cursor.execute(query, values)
        connection.commit()

        cursor.close()
        connection.close()

        return "Kayıt başarıyla tamamlandı!"

    return render_template("register.html")

yardım eder misisiniz.

kayıt ol butonuna tıkladığınızda 404 not found hatası veriyor.

rule parametresine yazdığınız argümanlardan ".html" karakterlerini silin.

dediğiniz gibi ".html" kısımlarını sildim. Bu sefer diğer sayfalar da açılmıyor.
düzenlenen kısım:


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

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

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

@app.route('/register', methods=['GET', 'POST'])
def register_page():
    if request.method == 'POST':
        name = request.form.get('name')
        password = request.form.get('password')

        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor()

        # Verileri eklemek için SQL sorgusu
        query = "INSERT INTO kullanici_veri (kullanici_ad,sifre) VALUES (%s, %s)"
        values = (name,password)

        cursor.execute(query, values)
        connection.commit()

        cursor.close()
        connection.close()

        return "Kayıt başarıyla tamamlandı!"

    return render_template("register.html")

İlginç! Uygulamanın bütün dosyalarını paylaşın isterseniz, kendi yerel bilgisayarımızda çalıştırmadan sorunu tespit edemeyiz. Ayrıca siz bu sorunu kendi yerel bilgisayarınızda almayıp, pythonanywhere’de mi alıyorsunuz sadece?

Edit: Dosyalarınız templates isminde bir klasörün içinde değil mi?

evet .html dosyaları templates klasörü içinde. biraz daha dikkatli baktım ve sorunun register.html dosyasında, kayıt ol butonunun action kısmında olduğunu gördüm.

register.html dosyası içeriği:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
    body {
        font-family: Arial, sans-serif;
        background-color: #f2f2f2;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
    }

    form {
        background-color: #ffffff;
        padding: 20px;
        border-radius: 8px;
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        width: 300px;
    }

    label {
        display: block;
        margin-bottom: 8px;
        font-weight: bold;
    }

    input {
        width: 100%;
        padding: 8px;
        margin-bottom: 16px;
        border: 1px solid #ccc;
        border-radius: 4px;
    }

    button {
        background-color: #007bff;
        color: #fff;
        border: none;
        border-radius: 4px;
        padding: 10px 20px;
        cursor: pointer;
        font-weight: bold;
    }

    button:hover {
        background-color: #0056b3;
    }
</style>
<title>Kayıt Formu</title>
</head>
<body>
    <form method="POST" action="/register.html"> # bu satırda daha önceden .html uzantısı yoktu.
        <label for="name">Adınız:</label>
        <input type="text" id="name" name="name" required>
        <label for="password">Şifre:</label>
        <input type="password" id="password" name="password" required>
        <button type="submit">Kayıt Ol</button>
    </form>
</body>
</html>

Çözüldü mü sorun?

hayır çözülmedi ama yol kat ettim.

error.log 'a baktığımda bu sonuçları gördüm:

2023-09-01 16:04:21,629:   File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1523, in full_dispatch_request
2023-09-01 16:04:21,629:     rv = self.dispatch_request()
2023-09-01 16:04:21,630: 
2023-09-01 16:04:21,630:   File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1509, in dispatch_request
2023-09-01 16:04:21,630:     return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
2023-09-01 16:04:21,630: 
2023-09-01 16:04:21,630:   File "/home/emirhan/site/web.py", line 39, in register_page
2023-09-01 16:04:21,630:     cursor.execute(query, values)
2023-09-01 16:04:21,631: 
2023-09-01 16:04:21,631:   File "/usr/local/lib/python3.10/site-packages/mysql/connector/cursor_cext.py", line 269, in execute
2023-09-01 16:04:21,631:     result = self._cnx.cmd_query(stmt, raw=self._raw,
2023-09-01 16:04:21,631: 
2023-09-01 16:04:21,631:   File "/usr/local/lib/python3.10/site-packages/mysql/connector/connection_cext.py", line 540, in cmd_query
2023-09-01 16:04:21,631:     raise errors.get_mysql_exception(exc.errno, msg=exc.msg,

mysql bağlantısını yapamıyor

mysql host ve şifre göstersem bir sorun olmaz değil mi

Nasıl bir sorun mesela? Başkalarının bu bilgilerinizi görmesinde bir sorun görmüyorsanız paylaşabilirsiniz.

tamam paylaşabilirim.
ayrıca kendi bilgisayarımda localhost üzerinden denememi yaptım ve kayıt olma işlemi başarılı oldu.
ancak internet ortamında

from flask import Flask, render_template, request
import mysql.connector

app = Flask(__name__)
app.debug = True
# MySQL veritabanı bağlantı ayarları
db_config = {
    'host': 'emirhan.mysql.pythonanywhere-services.com',
    'user': 'emirhan',
    'password': 'mysqlpass',
    'database': 'emirhan$uygulama_kayit'
}

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

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

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

@app.route('/register.html', methods=['GET', 'POST'])
def register_page():
    if request.method == 'POST':
        name = request.form.get('name')
        password = request.form.get('password')

        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor()

        # Verileri eklemek için SQL sorgusu
        query = "INSERT INTO kullanici_veri (kullanici_ad,sifre) VALUES (%s, %s)"
        values = (name,password)

        cursor.execute(query, values)
        connection.commit()

        cursor.close()
        connection.close()

        return "Kayıt başarıyla tamamlandı!"

    return render_template("register.html")

Şimdi, öncelikle action niteliğini oraya niye koyduğunuzu anlamadım. Onu kaldırın önce. Ayrıca adresleri de jinja stilinde yazmanız gerekiyor. templatelerde göstermek istediğiniz adresler jinja kod stilinde ve url_for denilen bir fonksiyon kullanılarak yapılır.

Ayrıca şöyle bir hata aldım:

mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on 'emirhan.mysql.pythonanywhere-services.com:3306' (10060)

Üstelik, flask’ın database kurulumunu da yapmamışsınız. Yani kodunuzda pek çok şey eksik görünüyor aslında. Nereden başlayacağımı bilemiyorum…

Örnek olur mu emin değilim, ama daha geçenlerde rest apiyle alakalı bir başlık için birşeyler karalamıştım, oraya bir bakın isterseniz, kodları bir inceleyin. Yetmezse, tutoriallara bakın, veritabanlarının nasıl kuruldukları gösteriliyor.

evet o hatayı bende alıyorum.
attığınız kodları inceledim ama pek uyarlayamadım koduma.

:upside_down_face: yardım ederseniz çok sevinirim

Bu aşamada sizi flask ile ilgili kaynakları okumaya veya izlemeye yönlendirmem daha doğru olur gibi geldi bana. YouTube’a girip flask tutorial yazdığınızda karşınıza bir sürü video çıkacaktır. Lütfen bir tane kanal seçin ve o kanalın tutorialını izlemeye başlayın. İzlerken notlarınızı alın. Anlamadığınız yerler olursa, videoyu geri sarın, bir daha izleyin. Baktınız bu kanalın anlattığı içerik sizi tatmin etmiyor, başka bir kanala geçersiniz.