Apache2 whith mod_wsgi python3'TypeError:'并返回错误500

时间:2017-03-13 12:55:47

标签: linux python-3.x ubuntu apache2 mod-wsgi

我的'controller.py'脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os

def application(environ, start_response):
    # the ouput string to respuesta var
    respuesta = "<p>Página web construida con <strong>Python!!!</strong></p>"
    # generating the response OK
    start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
    return respuesta

在'error.log'中:

  

[Mon Mar 13 12:36:32.656669 2017] [wsgi:error] [pid 28767:tid   139926041507584] [client 127.0.0.1:56382] mod_wsgi(pid = 28767):   处理WSGI脚本时发生异常   '/var/www/python/app/controller.py'。 [Mon Mar 13 12:36:32.656761 2017]

     

[wsgi:error] [pid 28767:tid 139926041507584] [client 127.0.0.1:56382]   TypeError:期望的字节字符串值序列,str类型的值   发现ubuntu @ ip- - - - :/ var / www / python / logs $ TypeError:   期望的字节串值序列,str类型的值

我已阅读this questions,但答案无效。

我的site.conf

<VirtualHost *:80>

    ServerName app.salvaj.es
    ServerAdmin salvajgb@salvaj.es
    DocumentRoot /var/www/python/static
    WSGIScriptAlias / /var/www/python/app/controller.py

    ErrorLog /var/www/python/logs/error.log
    CustomLog /var/www/python/logs/access.log combined

    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/python/static>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

</VirtualHost>

1 个答案:

答案 0 :(得分:2)

你做错了两件事。

首先,响应必须是可迭代的字节,而不是Unicode。

第二个是你要返回一个字符串,而不是一个字符串列表。后者会使您的代码效率非常低,因为一次发回一个字符。

使用:

$con = mysqli_connect("localhost","username","password","dbname");


$name2=$_POST['name1'];
$email2=$_POST['email1'];
$password2=$_POST['password1'];

$query = mysqli_query($con, "insert into `users-form` (name, email, password) values ('$name2', '$email2', '$password2')");

if ($query) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($con);
}

更好的是,不要自己从头开始编写WSGI应用程序,使用像Flask这样的Web框架,因为它会为您处理所有这些细节。