News

Piccolo contributo per rinnovo abbonamento hosting: http://www.python-it.org/forum/index.php?topic=10331.0

Topic: info su bottlepy  (Letto 800 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Missile

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
info su bottlepy
« il: Agosto 29, 2015, 22:06 »
Salve, ho letto il manuale ansi il tutorial dove spiega come fare un'app.

Ora ho scritto questo codice tramite il tutorial e capendo il meccanismo.
import sqlite3
from bottle import *
DB = "rubrica.db"
from bottle import default_app
class Main():
    @route('/')
    def main():
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("SELECT * FROM rubrica ORDER by id DESC")
        result = c.fetchall()
        c.close()
        output = template('index', rows=result)
        return output
   
    @route('/new', method='GET')
    def insert():
        if request.GET.get('save','').strip():

            contatto = request.GET.get('contatto', '').strip()
            numero = request.GET.get('numero', '').strip()
            conn = sqlite3.connect(DB)
            c = conn.cursor()

            c.execute("INSERT INTO rubrica (contatto,numero) VALUES (?,?)", (contatto,numero))
            new_id = c.lastrowid

            conn.commit()
            c.close()
            redirect('/')
        else:
            return template('new.tpl')
       
    @route('/edit/<no:int>', method='GET')
    def update(no):
        if request.GET.get('save','').strip():
            contatto = request.GET.get('contatto','').strip()
            numero = request.GET.get('numero','').strip()

            conn = sqlite3.connect(DB)
            c = conn.cursor()
            c.execute("UPDATE rubrica SET contatto  = ?, numero= ? WHERE id= ?", (contatto,numero,no))
            conn.commit()
            redirect('/')
            return template('edit', old = cur_data, no = no)
        else:
            conn = sqlite3.connect(DB)
            c = conn.cursor()
            c.execute("SELECT * FROM rubrica WHERE id LIKE ?", (str(no)))
            cur_data = c.fetchone()
            return template('edit', old = cur_data, no = no)
           
    @route('/delete/<no:int>', method='GET')
    def delete(no):
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("DELETE from rubrica WHERE id=?", (no,))
        conn.commit()
        redirect('/')

run()


il db è questo:
import sqlite3
con = sqlite3.connect('rubrica.db')
con.execute("CREATE TABLE rubrica (id INTEGER PRIMARY KEY, contatto char(100) NOT NULL, numero char(100) NOT NULL)")
con.commit()


vorrei sapere cosa si può fare con questo web framework?, perché ho in mente una rubrica telefonica accessibile via rete lan.


vi ringrazio molto e buona serata.

Offline Missile

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Re: info su bottlepy
« Risposta #1 il: Agosto 30, 2015, 15:17 »
nessuno non sa niente??.. comunque ho quasi risolto mettendo l'ip della macchina (computer), e posso interagire con altri computer e smartphone.

ecco il codice riscritto semplice:
#pip install bottle
#pip install bottle-sqlite
import sqlite3
from bottle import *
DB = "rubrica.db"
from bottle import default_app
class Main():
    @route('/')
    def main():
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("SELECT * FROM rubrica ORDER by id DESC")
        result = c.fetchall()
        c.close()
        output = template('index', rows=result)
        return output
  
    @route('/new', method='GET')
    def new_post():
        return template('new.tpl')
    
    @route('/new_insert', method='POST')
    def insert():
        contatto = request.forms.get('contatto')
        numero = request.forms.get('numero')
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("INSERT INTO rubrica (contatto,numero) VALUES (?,?)", (contatto,numero))
        conn.commit()
        c.close()
        redirect('/')
    
    @route('/edit_post/<no:int>')
    def update_post(no):
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("SELECT * FROM rubrica WHERE id = ?", (str(no)))
        cur_data = c.fetchone()
        return template('edit', old = cur_data, no = no)
        
    @route('/edit/<no:int>', method='POST')
    def update(no):
        contatto = request.forms.get('contatto')
        numero = request.forms.get('numero')
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("UPDATE rubrica SET contatto  = ?, numero= ? WHERE id= ?", (contatto,numero,no))
        conn.commit()
        redirect('/')
            
    @route('/delete/<no:int>', method='GET')
    def delete(no):
        conn = sqlite3.connect(DB)
        c = conn.cursor()
        c.execute("DELETE from rubrica WHERE id=?", (no,))
        conn.commit()
        redirect('/')

run(host="192.168.0.2", port=8080)

index.tpl
<table border="1">
<tr>
<td>ID</td>
<td>Contatto</td>
<td>Numero</td>
<td>Edit</td>
<td>Delete</td>
</tr>
%for row in rows:
  <tr>
    <td>{{row[0]}}</td>
   <td>{{row[1]}}</td>
   <td>{{row[2]}}</td>
   <td><a href="edit_post/{{row[0]}}">Edit</a></td>
   <td><a href="delete/{{row[0]}}">Del</a></td>
  </tr>
%end
</table>
<a href="/new">Nuovo</a>

edit.tpl
<form action="/edit/{{no}}" method="post">
<input type="text" name="contatto" value="{{old[1]}}" size="100" maxlength="100">
<input type="text" name="numero" value="{{old[2]}}" size="100" maxlength="100">
<input type="submit" name="save" value="save">
</form>

new.tpl
<p>Add</p>
<form action="/new_insert" method="POST">
<input type="text" size="100" maxlength="100" name="contatto">
<input type="text" size="100" maxlength="100" name="numero">
<input type="submit" name="save" value="save">
</form>



idea come fare anche la parte delle login con sessioni come posso fare?.. tanto cerco su google.

In più per fare la paginazione essendo che un domani ci saranno 1000 record?

vi ringrazio molto.
« Ultima modifica: Agosto 30, 2015, 15:20 da Missile »

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3102
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: info su bottlepy
« Risposta #2 il: Agosto 30, 2015, 15:35 »
vorrei sapere cosa si può fare con questo web framework?

nessuno non sa niente??

A volte è difficile capire cosa vuoi sapere...

Cosa fa il web framework Bottle? Risposta generale: quello che fa qualunque web framework.
Se sai cosa fa in generale un web framework (e immagino tu lo sappia visto che ne stai usando uno), allora sai cosa può fare Bottle.

Se invece la domanda è quali sono le specifiche funzionalità offerte da Bottle, basta leggere la documentazione.

idea come fare anche la parte delle login con sessioni come posso fare?.. tanto cerco su google.

Cercati un plugin (se esiste) adatto allo scopo.

In più per fare la paginazione essendo che un domani ci saranno 1000 record?

Non sono sicuro di aver capito cosa vuoi sapere.

Offline Missile

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Re: info su bottlepy
« Risposta #3 il: Agosto 30, 2015, 17:28 »
si , so cosa è e come funziona perché mi sono letto la documentazione.. etc..


per i login ho trovato questo:
https://github.com/mjhea0/bottle-user-authentication
che sto facendo dei test.

Per i 1000 record.. dicevo una paginazione come fosse quelle in php/mysql..

ora cerco su github e vedo se trovo qualcosa.

ti ringrazio molto e buona domenica.

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1601
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re: info su bottlepy
« Risposta #4 il: Agosto 30, 2015, 18:03 »
Paginazione come PHP/MySQL? ...

Offline Missile

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Re: info su bottlepy
« Risposta #5 il: Agosto 30, 2015, 19:02 »
Paginazione come PHP/MySQL? ...

si.. ora sto cercando .. caso mai vedo se c'è qualche plugin già fatto.

ti ringrazio molto e buona serata.

Offline Python

  • python sapiens sapiens
  • ******
  • Post: 2038
  • Punti reputazione: 2
  • Radon - Cyclomatic Complexity of you Python code
    • Mostra profilo
    • Radon - Cyclomatic Complexity of you Python code
Re: info su bottlepy
« Risposta #6 il: Agosto 30, 2015, 19:17 »
Se usassi Django, basterebbe aggiungere l'attributo paginate_by a una ListView. Purtroppo non ho mai usato Bottle. Tuttavia credo che non sia già implementato dal framework, dovrai farlo tu o trovare un plugin.

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7317
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: info su bottlepy
« Risposta #7 il: Settembre 02, 2015, 23:07 »
trovare un plugin.

A destra, per due.