Django1.11.1
打开命令行窗口,创建一个新的Django工程,并在该工程下创建应用,命令如下:django-admin startproject djauthcd djauthpython manage.py startapp djlogin
使用PyCharm开发工具打开djauth工程,打开工程根目录的djauth文件夹的settings.py文件,添加应用,添加模板目录,添加默认登录url,修改部分文件内容如下:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'login.apps.LoginConfig', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] LOGIN_URL = '/login/'
进行数据库迁移,这会生成auth等相关表。创建超级用户,用来登录使用,这样会在auth_user表增加一条记录。python manage.py migratepython manage.py createsuperuser
在工程根目录新建templates文件夹,并在此文件夹新建‘login.html’和‘index.html’文件,内容如下login.html
欢迎{{user}}
在工程根目录的djauth文件夹的urls.py添加到应用的路由,内容如下:from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'',include('login.urls')), ]
在应用文件夹新建urls.py文件,并添加内容如下:from django.conf.urls import url from . import views urlpatterns = [ url(r'login/',views.login), url(r'index/',views.index), url(r'logout/',views.logout), ]
在应用的views.py文件,编写代码如下:from django.contrib import authfrom django.shortcuts import HttpResponse from django.contrib.auth.decorators import login_required # Create your views here. def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = auth.authenticate(username=username, password=password) if user: print('ok') auth.login(request,user) return redirect('/index/') else: return render(request,'login.html',{'errormsg':'用户名或密码错'}) return render(request,'login.html') @login_required def index(request): return render(request,'index.html',{'user':request.user.username}) def logout(request): auth.logout(request) return redirect('/login/')这里主要是三个方法,一个装饰器1 auth.authenticate(username=username, password=password) 作用:验证用户名和密码,如果验证成功,得到的是一个用户对象,如果验证失败,得到的是None。 2. auth.login(request, user) 将验证过的用户 赋值给 request.user属性,这样会在session表增加一条记录,键是sessionid,值是用户信息。同时浏览器得到一个cookie,记录sessionid 3. auth.logout(request) 这个代码相当于request.session.flush() 将session数据都删除,并且Cookie也失效。4 @login_required在需要登录才能访问的视图函数使用这个装饰器,如果没有登录,会自动转到settings.py配置的LOGIN_URL地址。
运行服务器python manage.py runserver测试访问网站,一切正常