django入门(六)权限控制、搜索功能和nginx+fastcgi部署

django入门(六)权限控制、搜索功能和nginx+fastcgi部署

阅读别人的中文笔记
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc/

step by step(十一)

上传csv的内容到通信录,这个操作需要特定用户,才能让他切操作。

1.新建用户
访问http://localhost:8000/admin 进入里面的“用户”去新增,按照作者的文档所说,要在输入框中填写格式为:
格式为: '[algo]$[salt]$[hexdigest]'
的密码,所以建议我们到控制台生成md5的散列码,我就做了这个操作如下:
切入到控制台,导入md5的包,报错如下:
D:\work\easydjango>manage.py shell
>>> import md5
<string>:1: DeprecationWarning: the md5 module is deprecated; use hashlib instead
代码改为如下,操作就成功了:
>>> import hashlib
>>> hashlib.md5("test").hexdigest()
'098f6bcd4621d373cade4e832627b4f6'

晕,白玩了,貌似老的django版本才需要这样,新版直接输入用户名和密码就可以了。新建了用户后,继续编辑,给这个用户勾上
“职员状态”,这个用户就可以登录了,不过貌似啥事都不能做。

2.修改总的settings.py文件,增加如下一行:
UPLOAD_USER = 'kiko'
对了,刚才我新增的一个用户就是kiko

3.修改address/views.py文件,让只有登录的kiko用户才能进行上传操作
def upload(request):
    if request.user.username != settings.UPLOAD_USER:
        return render_to_response('address/error.html',
            {'message':'你需要使用 %s 来登录!' % settings.UPLOAD_USER})
        ...
另外注意一下,里面用到了settings,老规矩,头上到导入:
from django.conf import settings
这样,就只有kiko这个用户才能操作这个upload动作了。不过我们还要做到,如果用户没有登录,转到登陆页面,提示用户登录。这里其实调用的还是admin模块的东东。

在address/views.py中加入:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def upload(request):
    if request.user.username != settings.UPLOAD_USER:
        return render_to_response('address/error.html',
            {'message':'你需要使用 %s 来登录!' % settings.UPLOAD_USER})
    file_obj = request.FILES.get('file', None)
        ...
这样,在用户没有登录的情况下,会自动转向到登陆页面登陆了。不过这样结合还是有点生硬,不过参考示例慢慢学习了再说吧。

step by step(十二)
给模块加上搜索功能,很简单的一个,只能搜索一个name。
1.修改template/address/address_list.html页面的HTML页面内容,增加搜索的条件输入框:
<div id="content-main">
<table border="0" width="500">
    <tr align="right"><td>
    <form method="GET" action="/address/search/">
    搜索姓名:<input name="search" type="text" value="{{ searchvalue }}"/>
    <input type="submit" value="提交"/>
    </form>
    </td></tr>
    </table>
...
其中的searchvalue是后台回写过来的字典变量
2.修改address/views.py在里面增加了search方法
from django.views.generic.list_detail import object_list
#导入的模块
def search(request):
    name = request.REQUEST['search']
    if name:
        #extra_lookup_kwargs = {'name__icontains':name}   例子上有这行,其实这行暂时没有用到的,所以我注释了
        extra_context = {'searchvalue':name}
        return object_list(request, Address.objects.filter(name__icontains=name),
            paginate_by=10, extra_context=extra_context)
    else:
        return HttpResponseRedirect('/address/')
#从数据库中过滤出了对应值,并且把搜索条件回传给了extra_context

3.修改address/urls.py,增加了search方法的urls映射
(r'^search/$', 'address.views.search'),

访问http://localhost:8000/address,搜索就可以使用了。后面讲的是如何发布到apache上。我想发布在其他地方,所以这里不参考这个笔记,
另外搜索下,看看发布在哪里好些。

4.最后决定发布的环境用nginx+fastcgi
4.1安装nginx
下载软件
http://nginx.org/en/download.html
或者我是在UBUNTU,所以直接安装
apt-get install nginx
配置文件地址
/etc/nginx/nginx.conf
查看apt安装上的版本如下:
root@sillycat-desktop:/home/sillycat# nginx -v
nginx version: nginx/0.7.62
参考原来的日志http://hi.baidu.com/luohuazju/blog/item/f7880d822e5f12b86c811902.html
启动nginx命令:/etc/init.d/nginx start
访问http://localhost
访问到了Welcome to nginx!页面,恩。证明nginx安装成功了。

4.2 安装flup
首页
http://www.saddi.com/software/flup/
我参考了别人的BLOG:http://hi.baidu.com/10428/blog/item/7b0301f403c559e77709d776.html
用apt方式安装
sudo apt-get install python-flup
我原来启动是:python manage.py runserver 0.0.0.0:8000
现在改成: python manage.py runfcgi method=threaded host=0.0.0.0 port=8000 daemonize=false
最后那个daemonize配置为false比较方便调试

4.3 配置nginx
修改nginx的配置文件nginx.conf如下:
user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log  /var/log/nginx/access.log;

    sendfile        on;

    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

        server {
    listen 80;
    server_name 192.168.56.101;

    access_log /var/log/nginx/localhost/access.log;

    location / {
        fastcgi_pass localhost:8000;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_pass_header Authorization;
        fastcgi_param REMOTE_ADDR  $remote_addr;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_name;
        fastcgi_intercept_errors off;
        }
        }
}

我没有配置静态资源这些,都是教给django去访问的静态资源。这个以后再改吧。

你可能感兴趣的:(nginx,django,python,ubuntu,Access)