私はWeb開発に非常に慣れていweb.py
ないので、小さなWebアプリケーションを開発するためのフレームワークに取り組んでいます。ログイン画面がであると仮定します。ログインlocalhost:9090/login
に成功すると、次のページlocalhost:9090/details
にリダイレクトされ、別のボタンをクリックするとadd
、再びにリダイレクトされlocalhost:9090/details/details_entry
ます。
しかし、localhost:9090/details
ブラウザで直接試してみると、ログインしていなくても動作し、ページを見ることができました。それで、グーグルした後、私は使う必要があることをたくさん知ったが、グーグルでsession concept
ウェブの概念について検索する忙しいスケジュールのために今のところ疲れている。誰かが私にの概念を教えてもらえますか
session
(実際に作成された理由と、Pythonのページからログインした後の使用方法)実際には、の完全な概念は
user authentication
何ですか、ユーザーログインページを作成するために従う手順と、ユーザーログイン後に実行する手順と、ユーザーログアウト時に何が起こるか、Pythonでコードをセッションする方法の詳細
言語が何であれ、ログイン画面を作成し、いくつかのセッションIDを作成して次のURLにリダイレクトするという概念は同じであるため、ユーザー認証の概念は非常に重要であり、この質問は他の人にも役立つ可能性があります。
編集されたコード
--------------
Login.py
import os
import sys
import web
from web import form
render = web.template.render('templates/')
urls = (
'/', 'Login',
'/projects', 'Projects',
'/project_details', 'Project_Details',
)
app = web.application(urls, globals())
web.config.debug = False
db = web.database(dbn='mysql', db='Python_Web', user='root', pw='redhat')
settings = {}
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'user': None})
class Login:
login_form = form.Form(
form.Textbox('username', form.notnull),
form.Password('password', form.notnull),
form.Button('Login'),
)
def GET(self):
form = self.login_form()
return render.login(form)
def POST(self):
if not self.login_form.validates():
return render.login(self.login_form)
i = web.input()
username = i.username
password = i.password
user = db.select('user',
where = 'user_login = $username',
vars = {'username': username}
if username == user['username'] and password == user['password']:
session.user = username
raise web.seeother('/projects')
else:
return render.login_error(form)
def auth_required(func):
def proxyfunc(self, *args, **kw):
print session.user,"=======> Session stored"
try:
if session.user:
return func(self, *args, **kw)
except:
pass
raise web.seeother("/")
return proxyfunc
class Projects:
project_list = form.Form(
form.Button('Add Project'),
)
@auth_required
def GET(self):
project_form = self.project_list()
return render.projects(project_form)
def POST(self):
raise web.seeother('/project_details')
if __name__ == "__main__":
web.internalerror = web.debugerror
app.run()
上記のコードでは、ログインに成功すると、ページは次のページにリダイレクトされます。ここで私はセッションの概念を実装する必要がありますが、上記のコードのどこにセッションコードを実装するかで立ち往生していました。ログインページの上記のpyコードでセッションコードを書く正しい方法を誰かに教えてもらえますか?これが機能した後、同じpyファイルにログアウト機能を実装する必要があります
関数を実装した後にコードを編集auth_required
し、以下のエラーが発生しました
結果:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/web/application.py", line 239, in process
return self.handle()
File "/usr/lib/python2.7/site-packages/web/application.py", line 230, in handle
return self._delegate(fn, self.fvars, args)
File "/usr/lib/python2.7/site-packages/web/application.py", line 420, in _delegate
return handle_class(cls)
File "/usr/lib/python2.7/site-packages/web/application.py", line 396, in handle_class
return tocall(*args)
File "/home/local/user/python_webcode/index.py", line 102, in proxyfunc
print session.user,"=======> Session Stored"
File "/usr/lib/python2.7/site-packages/web/session.py", line 71, in __getattr__
return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'user'