任务描述:实现登录和退出
1.项目结构
2.源代码
urls.py
from django.conf.urls import url from django.contrib import admin from user import views admin.autodiscover() urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'index/', views.index), url(r'user/regist/', views.regist), url(r'user/login/', views.login), url(r'user/logout/', views.logout), ]
views.py
from django.shortcuts import render from django import forms from django.http import HttpResponseRedirect, HttpResponse import sqlite3 from . import models class UserForm(forms.Form): username = forms.CharField(max_length=100) password = forms.CharField(widget=forms.PasswordInput) headimg = forms.FileField() class LoginForm(forms.Form): username = forms.CharField(max_length=100) password = forms.CharField(widget=forms.PasswordInput) def insert(user): # 连接数据保存 models.User.objects.create(username=user.username, password=user.password, headimg=user.headimg) return True def find_user(user): users = models.User.objects.filter(username=user.username, password=user.password) if users: return True else: return False def regist(request): context = {} if request.method == 'POST': uf = UserForm(request.POST, request.FILES) if uf.is_valid(): username = uf.cleaned_data['username'] password = uf.cleaned_data['password'] headimg = uf.cleaned_data['headimg'] user = models.User(username=username, headimg=headimg.name, password=password) # save headimg fp = open('upload/' + headimg.name, 'wb') s = headimg.read() fp.write(s) fp.close() if insert(user): return HttpResponseRedirect('/user/login') # 重定向到登录界面 else: uf = UserForm() context = {'uf': uf} return render(request, 'user/regist.html', context) def login(request): context = {} if request.method == 'POST': uf = LoginForm(request.POST) if uf.is_valid(): username = uf.cleaned_data['username'] password = uf.cleaned_data['password'] user = models.User(username=username, password=password) if find_user(user): print('find it!') # session request.session['username'] = username response = HttpResponseRedirect('/index/') # cookie # response.set_cookie('username', username, 3600) # 将username写入浏览器cookie,失效时间为3600 response.set_cookie('password', password, 3600) # 将password写入浏览器cookie,失效时间为3600 return response else: return render(request,'/user/login/',context) else: uf = LoginForm() print('not find it!') context = {'uf': uf} return render(request, 'user/login.html', context) def logout(request): response = HttpResponseRedirect('/user/login/') try: del request.session['username'] except Exception as e: print(e) # response.delete_cookie('username') response.delete_cookie('password') # 删除cookie return response def index(request): context = {} # session username = request.session.get('username', 'anybody') context['username'] = username # cookie if request.COOKIES: print(request.COOKIES) return render(request, 'index.html', context)
index,html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h2>This is index page!</h2> <p>welcome,{{username}} !</p> <a href="/user/logout/">Logout</a> </body> </html>
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <form method="post" action="/user/login/"> {% csrf_token %} {{uf.as_p}} <input type="submit" value="submit"> </form> </body> </html>
regist.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>regist</title> </head> <body> <h3>regist</h3> <hr> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{uf.as_p}} <input type="submit" value="submit"> </form> </body> </html>
models.py
from django.db import models class User(models.Model): username = models.CharField(max_length=100) password = models.CharField(max_length=20, default='123456') headimg = models.FileField() def __str__(self): return self.username + ',' + self.password + ',' + self.headimg.name
3.运行测试
未登录访问:
登录后访问:
退出