python+django中使用hashlib庫對用戶密碼進行加密處理
使用hashlib庫的sha1對數據進行加密
如:
import hashlib
password = hashlib.sha1(fr.cleaned_data['password']).hexdigest()
其中fr.cleaned_data['password']是從表單獲取到的用戶密碼
用戶登陸的時候,也需要對密碼進行加密處理后再進行驗證,否則會登陸失敗
如下是例子:
views.py
deflogin(request):
? ? username = request.session.get('username',None)
? ? Tasklist = Task.objects.order_by("-id")[0:10]
? ? if request.method == "POST":
? ? ? ? fr = loginForm(request.POST)
? ? ? ? if fr.is_valid():
? ? ? ? ? ? username = fr.cleaned_data['username']
password = hashlib.sha1(fr.cleaned_data['password']).hexdigest() ? ?#對數據進行sha1加密
? ? ? ? ? ? name = User.objects.get(user = username).name
? ? ? ? ? ? user = User.objects.filter(user=username,passwd=password) #數據過濾,這里如果都匹配則返回值,
? ? ? ? ? ? if user: #判斷這個是否有效值
? ? ? ? ? ? ? ? request.session['username'] = name
? ? ? ? ? ? ? ? return HttpResponseRedirect("/")
? ? ? ? ? ? else: #無效
? ? ? ? ? ? ? ? return HttpResponseRedirect("/login.html",context_instance=RequestContext(request))
? ? else:
? ? ? ? fr = loginForm()
? ? return render_to_response('login.html',locals(),context_instance=RequestContext(request))
我在用戶注冊的時候,是直接在modes.py中進行密碼處理的:
class User(models.Model):
? ? user = models.IPAddressField(unique=True)
? ? passwd = models.CharField(max_length=100)
? ? name = models.CharField(max_length=100,unique=True)
? ? post = models.CharField(max_length=100)
? ? phone = models.CharField(max_length=100)
? ? email = models.EmailField(max_length=100)
? ? qq = models.CharField(max_length=100)
? ? permissions = models.CharField(max_length=10)
? ? def __unicode__(self):
? ? ? ? return self.user
def save(self,*args,**kwargs):
? ? ? ? self.passwd = hashlib.sha1(self.passwd+self.user).hexdigest()
? ? ? ? super(User,self).save(*args,**kwargs)
當然,這個也可以直接在views.py中進行加密處理,但是牛人說了,在MVC模式下,數據處理應該交給models處理
下圖是數據庫中得到的密碼:
passwd字段,都是經過sha1加密碼處理的,如第一個帳號為drfdai的真實密碼是:111111