Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Bottle.py ja regex filter

Ripe [13.01.2013 18:12:06]

#

users = "|".join(user.get_all_users())	# Hae käyttäjälista tietokannasta

@route('/<name:re:(' + users + ')>')
def user_path(name):
	return name

@route('/user/create', method='POST')
def user_create():
	global users
	# Lisää käyttäjä

	users = "|".join(user.get_all_users())
	print users

Ongelmana on, että kun muuttujaa users muutetaan, tuo @route pitää saman users-listan kuin mitä se oli kun käynnistin python-tiedoston. Eli jos uusi käyttäjä rekisteröityy, @route:n regex-filter ei lataa muuttunutta users-muuttujaa, eli käyttäjä ei voi mennä omalle sivulleen, vaan tulee 404. Kun painan Ctrl+C ja suoritan python-tiedoston uudelleen, vasta silloin regex-filter lataa muuttuneen users-muuttujan.

The Alchemist [14.01.2013 09:33:02]

#

Routet ovat merkkijonoja. Ymmärrät kai tästä välittömästi sen, ettei route päivity, jos muutat sellaisen muuttujan arvoa, jota on käytetty kyseisen merkkijonon luomiseen.

foo = 'foo'
string = 'testi' + foo
foo = 'bar'

print(string)

Älä ylläty...

-----

Todellinen ongelma on se, että suoraan sanoen raiskaat routeja käyttäessäsi niitä noin täydellisen väärin. Route saa täsmätä oikeastaan ihan mihin tahansa merkkijonoon käyttäjänimen osalta. Tarkistat vain funktion sisällä, että löytyykö nimellä käyttäjää vai pitääkö näyttää virhesivu.

Jos oikeasti haluat käyttää käyttäjän profiiliin ohjaavana urlina juuritasoa ('/my_username'), niin laita kyseinen route viimeiseksi, jolloin se olettaakseni suoritetaan vain silloin, kun aiemmat routet eivät täsmää.

Suosittelisin kyllä käyttämään vähemmän monitulkintaisia polkuja, esimerkiksi tällaista: '/profile/my_username'.

Ripe [14.01.2013 09:46:05]

#

Ymmärrän kyllä merkkijonot. Olen kai niin tyhmä, että en tullut ajatelleeksi sitä tehdessäni tätä. Kiitos selvennyksestä. Kai voisin tehdä routet tyyliin '/profile/username', mutta mieluummin haluan ne suoraan '/username' tyyliin. Pitääpä laittaa tuo virhesivu-ohjaus toimimaan.
EDIT: Nyt toimii tosi hyvin, users routen ei tarvi etes olla viimeisenä. Kiitos paljon

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta