저는 학교에서 졸업을위한 게시물 등을 만들기위한 웹 플랫폼을 구축하고 있습니다. 나는이 파이썬 코드를 작성해 왔으며 무엇을해야할지 확신이 없습니다. 여러 세션을 관리하기 위해 비커를 사용해 보았습니다.이 코드는 StuFish's code에 기반을두고 있으며 코드로 코드를 합성하는 방법을 잘 모르는 것 같습니다. 홈페이지 렌더링과 관련하여 문제가 발생합니다.AttributeError : 'NoneType', 비커를 사용하여 웹 세션을 여러 번 수행했습니다.
import web
import datetime
from beaker.middleware import SessionMiddleware
from Models import RegisterModel, LoginModel, Posts
web.config.debug = False
urls = (
'/', 'Home',
'/adminhome', 'AdminHome',
'/modhome', 'ModHome',
'/register', 'Register',
'/postreg', 'PostRegistration',
'/login', 'Login',
'/check-login', "CheckLogin",
'/logout', 'Logout',
'/post-activity', 'PostActivity',
'/profile', 'Profile',
'/settings', 'Settings',
'/update-user', 'UpdateSettings',
'/admin', 'Admin'
)
t_globals = {
'datestr': web.datestr,
'str': str,
'datetime': datetime
}
app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore("sessions"),initializer={"user":None})
session_data = session._initializer
render = web.template.render("Views/Templates", base="MainLayout", globals={"session":session_data, "current_user": session_data["user"]})
# beaker options are optional.... but it's good to see
# where they are called
session_opts = {
'session.cookie_expires': True,
'session.timeout' : 600,
'session.secure' : True,
}
# define webPy app
# smash it all together and define name for cookie key (sid)
def session_mw(app):
return SessionMiddleware(app, config = session_opts, key = "sid")
# function to check if we are logged in
def logged(session):
if 'Login' in session:
if session['Login']==1:
return True
else:
return False
else:
return False
# create different renders based on log in privilege
def create_render(privilege):
session = web.ctx.environ['beaker.session']
if logged(session) == True:
if privilege == 0:
print("OH BABY")
render = web.template.render('/Views/Templates/user/', base='/Views/Templates/MainLayout', globals=t_globals)
elif privilege == 1:
print("LET ME LOVE YOU")
render = web.template.render('/Views/Templates/user/', base='/Views/Templates/MainLayout', globals=t_globals)
elif privilege == 2:
print("DONT HURT ME")
render = web.template.render('/Views/Templates/admin/', base='/Views/Templates/MainLayout', globals=t_globals)
else:
print("NOOT NOOT")
render = web.template.render('/Views/Templates/viewer', base='/Views/Templates/MainLayout', globals=t_globals)
render = web.template.render('/Views/Templates/', base='MainLayout', globals=t_globals)
return render
class Login:
def GET(self):
session = web.ctx.environ['beaker.session']
if logged(session) == True:
print("SOMEBODY ONCE TOLD ME THAT THE WORLD WAS GONNA ROLL ME BUT I AINT THE SHARPEST TOOL IN THE SHED")
render = create_render(session['privilege'])
return render.Home()
else:
render = create_render(0)
print("BLAH BLAH BLAH BLAH")
return render.Home()
# I get user credentials from a database (called in model.get_users)
def POST(self):
session = web.ctx.environ['beaker.session']
data= web.input()
name = data['user']
password = data['password']
ident = model.get_users(m, name)
try:
if password == ident.password.strip():
session['Login'] = 1
session['privilege'] = ident['privilege']
session['user'] = name
session.save()
render = create_render(session['privilege'])
print("HERE")
return render.Home()
else:
session.login = 0
session.privilege = 0
session.user = 'none'
render = create_render(session['privilege'])
print("NO HERE YO")
return render.Login()
except:
session['Login'] = 0
session['privilege'] = 0
render = create_render(session['privilege'])
print("BANANA")
return render.Login()
# Credits go to bbangert for the middleware code
class Logout:
def GET(self):
session = web.ctx.environ['beaker.session']
try:
render = create_render(0)
session.invalidate()
session.delete()
print("TOPSY TURVY")
return render.Login()
except:
session.invalidate()
session.delete()
render = create_render(0)
print("MESSY RIGHT")
return render.Login()
class Home:
def GET(self):
session = web.ctx.environ['beaker.session']
if logged(session) == False:
raise web.seeother('/login')
else:
render = create_render(0)
return render.Home()
'''
data = type('obj', (object,), {'username':'q', 'password':'q'})
login = LoginModel.LoginModel()
isValid = login.check_user(data)
if isValid:
session_data['user'] = isValid
post_model = Posts.Posts()
posts = post_model.get_all_posts()
return render.Home(posts)
'''
class Register:
def GET(self):
return render.Register()
class PostRegistration:
def POST(self):
print("DOING POST PROCESSING")
data = web.input()
reg_model = RegisterModel.RegisterModel()
reg_model.insert_user(data)
return data.username
class CheckLogin:
def POST(self):
print("DOING CHECK LOGIN")
data = web.input()
login = LoginModel.LoginModel()
isValid = login.check_user(data)
if isValid:
session_data["user"] = isValid
return isValid
return "error"
class PostActivity:
def POST(self):
print("DOING POST ACTIVITY")
data = web.input()
data.username = session_data['user']['username']
post_model = Posts.Posts()
post_model.insert_post(data)
return "success"
class Profile:
def GET(self):
return render.Profile()
class Settings:
def GET(self):
return render.Settings()
class UpdateSettings:
def POST(self):
data = web.input()
data.username = session_data['user']['username']
update = RegisterModel.RegisterModel()
update.update_settings(data)
return "success"
class Admin:
def GET(self):
return render.Admin()
class AdminHome:
def GET(self):
return AdminHome()
class ModHome:
def GET(self):
return ModHome()
if __name__ == "__main__":
app.run(session_mw)
내가 정의 렌더링 여러 번하지만 그 문제가 될 이유를 내가 이해하지 못하는 this code와 같은 사건이었다 것으로 이해 :
여기에 우리가 가지고있는 코드입니다. 누군가가 나에게 솔루션을 제공하거나 날이 오류를 해결하는 데 도움이 될 수있는 경우
http://0.0.0.0:8080/
BLAH BLAH BLAH BLAH
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/web/application.py", line 257, in process
return self.handle()
File "/usr/local/lib/python3.4/dist-packages/web/application.py", line 248, in handle
return self._delegate(fn, self.fvars, args)
File "/usr/local/lib/python3.4/dist-packages/web/application.py", line 488, in _delegate
return handle_class(cls)
File "/usr/local/lib/python3.4/dist-packages/web/application.py", line 466, in handle_class
return tocall(*args)
File "app.py", line 94, in GET
return render.Home()
AttributeError: 'NoneType' object has no attribute 'Home'
, 그 것이다 크게
(!) 참고를 감사 : 여기
우리 나타나는 오류 메시지입니다 내가 this guy과 관련된하고 단지 코드가 비슷하다고 생각한 경우
로깅되면 (세션) 기본 위치가 틀림없이 렌더링되도록 이제 코드를 재정렬했습니다. 이제 AttributeError : No라는 템플리트가 생겼습니다. – HolyWater
그러면'web.template.render (directory)'를 호출 할 때 지정한 디렉토리에 "Home"파일이 없습니다. – busterroni