Ошибка входа на веб-страницу Python - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь создать что-то вроде веб-сервера с python и cherrypy.

Я хочу поместить htmls в отдельные файлы и встроить их в мой скрипт на python.Код, который я использовал для этого:

    @cherrypy.expose
def welcome(self, loginAttempt = None):
    """ Prompt the user with a login form. The form will be submitted to /signin
        as a POST request, with arguments "username", "password" and "signin"
        Dispaly a login error above the form if there has been one attempted login already.
    """
    #Debugging Process Check
    print "welcome method called with loggedIn = %s" % (loginAttempt)

    if loginAttempt == '1':
       """ If the user has attempted to login once, return the original login page
       with a error message"""
       page = get_file("loginPageE.html") 
       return page

    else:    
        page = """
               <form action='/signin' method='post'>
               Username:  <input type='text' name='username' /> <br />
               Password:  <input type='password' name='password' />
                 <input type='submit' name='signin' value='Sign In'/>
               </form>
        """          
        return page

, где loginPageE.html равен

<html>
<head>
<title>Failed Login Page</title>
</head>

<body>

<!-- header-wrap -->
<div id="header-wrap">
    <header>

        <hgroup>
            <h1><a href="loginPageE.html">Acebook</a></h1>
            <h3>Not Just Another Social Networking Site</h3>
        </hgroup>


        <ul>
            <form action='/signin' method='post'>
                Username:  <input type='text' name='username' />
                Password:  <input type='password' name='password' />
                           <input type='submit' name='signin' value='Sign In'/>
            </form>
        </ul>


    </header>
</div>

</body>
</html>

Однако я продолжаю получать сообщение об ошибке, которое читает

Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/cherrypy/_cprequest.py", line 606, in respond
    cherrypy.response.body = self.handler()
  File "/usr/lib/pymodules/python2.7/cherrypy/_cpdispatch.py", line 25, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "proj1base.py", line 74, in welcome
    page = get_file("loginPageE.html")
NameError: global name 'get_file' is not defined

Мне было интересно, если кто-нибудь может помочь?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 18 марта 2012

get_file не является одной из стандартных функций Python, поэтому она должна быть пользовательской, которую вы использовали.Вы можете создать простую функцию для чтения файла и возврата его содержимого в виде строки, подобной этой:

def get_file(path):
    f = open(path, 'r')
    output = f.read()
    f.close()
    return output

Вы можете прочитать об управлении файлами Python на http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files

0 голосов
/ 18 марта 2012
def get_file(path):
    with open(path, 'r') as f:
        return f.read()

Тем не менее, рассмотрите возможность использования правильного шаблонизатора. Jinja2 действительно хорош и позволяет вам использовать условные выражения и т. Д. В шаблонах - то, что вам наверняка понадобится в какой-то момент. Кроме того, он делает для вас такие приятные вещи, как автоэкранирование переменных, если вы об этом попросите.

0 голосов
/ 18 марта 2012

Что ж, из-за ошибки очевидно, что python не знает, что такое функция get_file(). Вы уверены, что в тот момент времени, когда вы вызываете эту функцию внутри функции welcome(), было определено get_file()?

...