$ host www.google.com
www.google.com has address 142.250.186.68
www.google.com has IPv6 address 2a00:1450:400d:80e::2004
www.google.com
com
(ali net
, org
, …, ter državne domene, kot si
, …)com
): google
google.com
): www
www.google.com
, pošljemo poizvedbo imenskemu strežniku internetnega ponudnika.
com
, nazadnje še strežnik za google.com
.localhost
ustreza naslovoma 127.0.0.1 in ::1.https://www.google.com/
www.google.com
.
GET
, POST
, …)/index.html
)GET
GET
se uporablja za pridobivanje podatkov iz spletnega strežnika.
GET
naj se stanje na strežniku ne bi spremenilo.
POST
POST
se uporablja pri pošiljanju podatkov strežniku.
POST
lahko spremeni.
POST
!POST
izvedemo preusmeritev - naslednji zahtevek uporabi metodo GET
.
POST
dobimo vsebino (brez preusmeritve), brskalnik ob osvežitvi (po opozorilu) ponovno izvede enak zahtevek.
POST
.<znacka>
Vsebina značke
<z atribut="vrednost" /> <!-- značka brez vsebine -->
</znacka>
<!DOCTYPE html>
- na vrhu dokumenta (brez zapiranja) določa obliko dokumenta<html>
- vrhnja značka, ki vsebuje celotno spletno stran<head>
- glava dokumenta
<title>
- naslov dokumenta<meta />
- metapodatki (kodiranje znakov, način prikaza, …)<script>
- skripta v jeziku JavaScript<style>
- deklaracija stilov v obliki CSS<link />
- zunanja datoteka (stili v CSS, ikone, …)<body>
- telo dokumenta<div>
- organizacijski blok (za potrebe postavitve)<span>
- medvrstični blok (za potrebe oblikovanja)<h1>
, <h2>
, <h3>
- naslovi<p>
- odstavek<br />
- prelom vrstice<em>
- poševno besedilo; <strong>
- krepko besedilo<table>
- tabela
<tr>
- vrstica tabele<th>
- celica glave tabele, <td>
- celica telesa tabele<ul>
- neoštevilčen seznam, <ol>
- oštevilčen seznam
<li>
- element seznama<a href="povezava">
- hiperpovezava na drugo stran<img src="povezava" />
- slika<form action="povezava" method="metoda">
- obrazec (metoda
= GET
/POST
)
<input type="tip" name="ime" value="vrednost" />
- vnosno polje, vrsta odvisna od tip
:
text
- besedilno poljepassword
- polje za geslonumber
- številsko poljedate
- polje za datumfile
- nalaganje datotekesubmit
- gumb za pošiljanje obrazca<style>
ali v posebni datoteki s končnico .css
, ki jo vključimo z <link rel="stylesheet" href="stil.css" type="text/css">
.selektor {
lastnost1: vrednost1;
lastnost2: vrednost2;
...
}
{}
) lahko navedemo tudi v atributu style
pri posamezni znački.značka
: element tipa <značka>
.razred
: element z atributom class="razred"
#oznaka
: element z atributom id="oznaka"
značka.razred#oznaka
: element <značka class="razred" id="oznaka">
značka .razred
: element z atributom class="razred"
znotraj elementa <značka>
bottle
bottle
, ki ponuja funkcionalnost spletnega strežnika, do katerega lahko dostopamo lokalno.pip install bottle
bottle.py
v mapo, kjer imamo svojo aplikacijo.Spletni vmesnik gradimo s funkcijami.
import bottle
@bottle.get('/')
def pozdravi_svet():
return 'Pozdravljen, svet!'
bottle.run()
bottle.get
in bottle.post
podamo pot, vračata pa dekorator, ki registrira funkcijo za zahtevke GET
oziroma POST
na podani poti.
bottle.run(host='127.0.0.1', port=8080, reloader=False, debug=False)
host
: naslov, na katerem teče aplikacija
host='0.0.0.0'
, bo do aplikacije mogoče dostopati tudi z drugih računalnikov.port
: številka vrat, na katerih teče aplikacija
reloader
: ali naj se aplikacija samodejno znova zažene ob spremembah kode.debug
: ali naj se izpisujejo napake.
reloader=True, debug=True
.@bottle.get('/pozdravi/<ime>/')
def pozdravi(ime):
return f'Živjo, {ime}!'
@bottle.get('/kvadriraj/<n:int>')
def kvadriraj(n):
return f'{n}^2 = {n**2}'
<x:float>
(decimalna števila), <x:path>
(pot do datoteke - lahko vsebuje /
), <x:re:exp>
(niz, ki ustreza regularnemu izrazu exp
).template
, ki ji kot poimenovane parametre podamo vrednosti spremenljivk.
@bottle.get('/pozdravi/<ime>/')
def pozdravi(ime):
return bottle.template('pozdravi.html', ime=ime)
views
(z malimi črkami).
<html>
<head>
<title>Pozdravna stran za </title>
</head>
<body>
Živjo, <b></b>!
</body>
</html>
%
, se razumejo kot Pythonova koda.
if
, for
, with
, …) moramo končati z end
.vrstica besedila
% if 3 < 7:
% a = 42
% else:
% a = 100
% end
odgovor je
vrstica besedila
odgovor je 42
<ul>
% for i in range(5):
<li></li>
% end
</ul>
<ul>
<li>0</li>
<li>1</li>
<li>4</li>
<li>9</li>
<li>16</li>
</ul>
view
template
lahko uporabimo dekorator view
, ki mu podamo ime predloge in privzete vrednosti spremenljivk.
@bottle.get('/pozdravi/<ime>/')
@bottle.view('pozdravi.html')
def pozdravi(ime):
return dict(ime=ime)
view
ignorirajo.rebase
rebase
, ki ji podamo ime datoteke z osnovno predlogo.template
lahko tudi funkciji rebase
kot poimenovane parametre podamo vrednosti spremenljivk.<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
% rebase('osnova.html', naslov=f'Pozdravna stran za {ime}')
<h1>Živjo, <b></b>!</h1>
static_file
lahko ponujamo tudi statične datoteke (slike, stili CSS, skripte, …)static
).
@bottle.get('/static/<datoteka:path>')
def static(datoteka):
return bottle.static_file(datoteka, root='static')
GET
, preberemo iz objekta request.query
.
<form action="/sestej/">
a: <input type="text" name="a">
b: <input type="text" name="b">
<input type="submit" value="a + b">
</form>
@bottle.get('/sestej/')
def sestej():
a = bottle.request.query.a
b = bottle.request.query.b
return f'{a} + {b} = {a + b}'
POST
in preusmeritvePOST
, preberemo iz objekta request.forms
.redirect
.
<form action="/obrazec" method="POST">
Uporabnik: <input type="text" name="uporabnik" />
<input type="submit" value="Prijava" />
</form>
@bottle.post('/obrazec')
def obrazec_post():
uporabnik = bottle.request.forms.uporabnik
# zabeležimo prijavo
bottle.redirect('/obrazec')
response.set_cookie
.
bottle.response.set_cookie('uporabnik', uporabnik, secret=SKRIVNOST, path='/')
SKRIVNOST
je vrednost, s katero podpisujemo piškotke in tako zagotovimo njihovo celovitost.path='/'
nam zagotavlja, da bomo lahko do piškotka dostopali iz celotne aplikacije.request.get_cookie
.
uporabnik = bottle.request.get_cookie('uporabnik', secret=SKRIVNOST)
response.delete_cookie
.
bottle.response.delete_cookie('uporabnik', path='/')
rebase
so v predlogah na voljo še sledeče funkcije:
include(predloga, ...)
- vključi navedeno predlogodefined(spremenljivka)
- pove, ali je spremenljivka (podana kot niz) definiranaget(spremenljivka, privzeto=None)
- vrne vrednost spremenljivke oziroma privzeto vrednostsetdefault(spremenljivka, privzeto)
- če spremenljivka ni definirana, jo nastavi na podano privzeto vrednostBaseTemplate.defaults
.
bottle.BaseTemplate.defaults['povecaj'] = lambda x: x+1
bcrypt
.