您的位置:首页 > 数据库

C-BlogServer博客-数据库以及验证码的解决

2015-09-03 00:00 369 查看
在第三章合并c并发的server服务器以及调用django的wsgi接口两部分内容后,只需要做django内部的编写就可以写出网站

这里mark一下使用pil的方法

apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
ln -s /usr/include/freetype2 /usr/include/freetype
pip install PIL --allow-external PIL --allow-unverified PIL

可是事实上第三章只测试了静态html网页的可用性

在实际的blog网站中,遇到了一些问题

问题以及解决方案

1,数据库读写问题

使用我写的server服务器,第一个问题就出现在这,只要涉及到数据库的读写都会出现这个问题,根据提示我们不难发现是线程的问题,搜索一下没有什么合理的解决方案,尝试根据错误提示来查找问题的所在

DatabaseWrapper objects created in a thread can only be used in that same thread.





既然写着thread id,我们尝试在源程序中将所有创建的线程都printf出他的pid





不难发现,主线程和响应线程导致这个问题,怎么办呢,肯定将主线程中一些涉及到python数据库的代码转移到响应线程中

回到main函数,我们调用了两个python相关的函数,都是自己定义的方法,包括djangoinit和djangodestory(排除)

其中init方法里头





里面只有少数的方法,包括py环境初始化,设置工作目录,导入wsgi,再获取application方法

其实只有包导入和获取部分放到响应线程中完成即可





编译测试一下





可以正常打开网站了

这里头我们立马发现第二个问题

2,验证码无法显示

无法显示原因是什么的,单从浏览器很难看出来

利用chrome我们打开验证码图片链接





发现了错误原因

使用了重复的标头,这个怎么解决呢?

我们用fiddler来看传输的文本内容





不难发现在响应头部分

Content-length有两个,也就是说静态文件在django上会添加上响应头

然后实际上就算去掉重复的头,c根据wsgi接口得到的数据也只有9byte

用回python对接口调用

from mysite import wsgi

class HttpHandler:
status = None
body = None
def start_response(self,status, response_headers, exc_info=None):
self.status = str(status)
def HttpServer(self,method,path,req):
environ = {'REQUEST_METHOD':method,'SERVER_NAME':'BlogServer','QUERY_STRING':req,'SERVER_PORT':'80','PATH_INFO':path,'wsgi.input':''}
self.body = str(wsgi.application(environ,self.start_response))
def Run(self):
self.HttpServer('GET','/captcha/image/fa75e9edf75866e81e0146855d17345c92bcfe22/','')
return self.status+'\r\n'+self.body
print HttpHandler().Run()

显示的是完整图片的byte

问题在于c调用python时返回值,为什么是9byte





最后一位刚好是00,难道在c中把这一位当成\0终结?





强行复制内存,无效





依然打不开图片

虽然打不开图片,但修改一下排除掉重复标头可以正常访问一下

3,POST的header以及cookie等请求头并没有作为参数传参

这些问题在后续博客中继续研究
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: