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

本文介绍了Django中权限控制的具体实现方法,包括特定用户的CSV上传功能,并实现了基于用户名的访问限制。此外,还介绍了如何为应用添加搜索功能,以及如何通过nginx和FastCGI将Django应用部署到生产环境中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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去访问的静态资源。这个以后再改吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值