django项目 设置session 实现用户登入登出

一.配置文件 settngs.py中

# 使用django认知系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定
LOGIN_URL = ‘/user/login‘

# 设置允许保存session
SESSION_SAVE_EVERY_REQUEST = True
# 设置session存放在缓存中
SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘
# 使用默认选项的缓存设置存放session
SESSION_CACHE_ALIAS = "default"
# 设置session过期时间,关闭浏览器时session过期(cookies) 和设置固定时间后过期 只能二选一
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
# 30分钟后session过期, 只能和关闭时浏览器失效 二选一
# SESSION_COOKIE_AGE=5*60

二.创建一个base_model.py

from django.db import models

# 创建所有的模型的基类
class BaseModel(models.Model):
    """抽象模型基类"""
    create_time = models.DateTimeField(auto_now_add=True, verbose_name=‘创建时间‘)
    update_time = models.DateTimeField(auto_now_add=True, verbose_name=‘更新时间‘)
    is_delete = models.BooleanField(default=False, verbose_name=‘是否删除‘)

    class Meta:
        # 指定这个类是一个抽象模型类
        abstract = True

三.用户模型models.py中

from django.db import models

# 导入django默认的认证系统包,使用认证系统自带的模型创建用户相关字段
from django.contrib.auth.models import AbstractUser   # 该包下有个模块的名字和这个很相似becareful
# 导入抽象模型基类
from db.base_model import BaseModel

# 使用django默认的认证系统的类去创建模型
class User(AbstractUser, BaseModel):
    """用户模型类"""
    # 指定数据表的名字,以及后台管理系统显示字段的名字
    class Meta:
        # 指定数据表的名字
        db_table = ‘df_user‘
        # 指定后台管理系统显示字段的名字
        verbose_name = ‘用户‘
        # 让设置的后台管理系统的名字和设置的一致
        verbose_name_plural = verbose_name

四.视图文件views.py中

from django.shortcuts import render, redirect  # 返回应答,反解析
from django.core.urlresolvers import reverse  # 用来进行反解析操作
from django.core.mail import send_mail  # 使用这个模块进行发送邮件操作
from django.http import HttpResponse
from django.views.generic import View  # 导入通用类视图 后面的View v大写
from django.conf import settings
from django.contrib.auth import authenticate, login, logout  # 通过导入django认证系统的这三个模块,进行用户身份确认,登录,登出操作
from django.core.paginator import Paginator

# 导入正则
import re
# 因为在setting.py 中导入的默认搜寻路径,所以虽然报错,但是可以导入. 如果修改,无法访问,为什么.
from user.models import User, Address
from goods.models import GoodsSKU
from order.models import OrderInfo,OrderGoods
# 导入itsdangerous包里的方法,进行数据签名
from itsdangerous import TimedJSONWebSignatureSerializer as make_sign
# 用来捕捉激活连接的签名是否过期
from itsdangerous import SignatureExpired
# 导入发送激活邮件的模块celery
from celery_tasks.tasks import send_register_active_email
# 导入redis相关模块,和redis数据库进行交互
from redis import StrictRedis
# 导入自定的装饰器类
from utils.mixin import LoginRequiredView, LoginRequiredViewMixin

# django框架会给request对象增加一个属性user
# 如果用户已经登录,user是认证系统用户模型类(User)的实例对象
# 如果用户没有登录,user是AnonymousUser类的实例对象
# 在模板文件中可以直接使用request的user属性
class LoginView(View):
    """登录"""
    def get(self, request):
        """显示登录页面"""
        # 获取在请求过程中传递回来的cookie
        if ‘username‘ in request.COOKIES:
            username = request.COOKIES[‘username‘]
            # 如果用户在请求登录页面时发送了带有username的cookie,说明用户选择记住了用户名,应该将相应的html标签改为checked
            checked = ‘checked‘
        else:
            # 没有发送用户名过来,将两个空字符串传递回去
            username = ‘‘
            checked = ‘‘
        return render(request, ‘login.html‘, {‘username‘:username, ‘checked‘: checked})

    def post(self, request):
        """提交登录信息"""
        # 获取参数
        username = request.POST.get(‘username‘)
        password = request.POST.get(‘pwd‘)
        remember = request.POST.get(‘remember‘)
        # 参数校验
        if not all([username, password]):
            return render(request, ‘login.html‘, {‘errmsg‘: ‘请填写用户名和密码‘})
        # 业务处理
        # 根据用户名和密码查找用户信息,使用django认证系统的authenticate(username=username, password=password)
        # 方法,判断用户是否存在
        user = authenticate(username=username, password=password)
        # 进行判断
        if user is not None:
            # 进行判断账户是否已经激活
            if user.is_active:
                # 用户已激活, 允许登录,使用login()方法,记录登录状态,这是django自带的认证系统的一个方法,会自己创建session,参数必须传入
                # 如果自己自己创建session   request.session[键]=值,  request.session.set_expiry(value)
                # 如果value是一个整数,会话将在value秒没有活动后过期。
                # 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
                # 如果value为None,那么会话永不过期。
                # 如果没有指定过期时间则两个星期后过期。
                login(request, user)
                # 获取登录后要跳转到的next地址, 默认跳转到首页 /user/login?next=参数
                next_url = request.GET.get(‘next‘, reverse(‘goods:index‘))
                # print(next_url)
                # 跳转到next_url网址
                # redirect()是HttpResponseRedirect的方法, HttpResponseRedirect是HttpResponse的子类, 最终返回的是一个response对象
                # 在提交表单的模板html form表单中,不设置action,就会使用地址栏的地址进行提交,这样才能将参数传递过来
                response = redirect(next_url)
                # 判断是否需要记住用户名
                if remember=="on":
                    # 设置一个cookie信息,来保存用户的用户名
                    # 设置cookie需要调用set_cookie方式,set_cookie它是HttpResponse对象的方法
                    # HttpResponseRedirect是HttpResponse的子类
                    response.set_cookie(‘username‘, username, max_age=7*24*3600)
                else:
                    # 否则删除cookie,取消记住用户名
                    response.delete_cookie(‘username‘)
                # 返回应答
                return response
            else:
                # 用户未激活
                return render(request, ‘login.html‘, {‘errmsg‘:‘用户名未激活,请先激活‘})
        else:
            # 用户名或密码错误
            return render(request, ‘login.html‘, {‘errmsg‘: "用户名与密码不匹配"})

# 登出账号 /user/logout
class LogoutView(View):
    """退出登录"""
    def get(self, request):
        # django自带的认证系统功能,能登出账号
        logout(request)
        # 返回应答,转到首页
        return redirect(reverse(‘goods:index‘))

原文地址:https://www.cnblogs.com/lowmanisbusy/p/9196810.html

时间: 2024-10-13 06:06:36

django项目 设置session 实现用户登入登出的相关文章

flask笔记:6:用户登入登出

用户登入登出需要用到 Flask-Login 插件 初始化 修改配置文件 app/__init__.py from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy import os from flask.ext.login import LoginManager app=Flask(__name__) app.config.from_object('config') db=SQLAlchemy(app) lm = L

[Django]登陆界面以及用户登入登出权限

前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'#用户请求django站点页面首先检查这个模块 这里的www.urls是我的工程www下urls.py文件 urls.py文件主要设置urlpatterns参数,设置如下: urlpatterns= [    url(r'^$', 'login.views.login_view', name='log

MySQL登入登出

1. 我在官网上找的下载链接,但是 下载速度比较慢,用了迅雷7,有些部分来自镜像等,但是应该也没事...下载的是 免安装版 mysql-noinstall-5.1.73-win32.zip 在 百度云(JeeHuanJing) --> MySql_in_Windows 里面,有备份保存. 2. 目录 “... ...\mysql-noinstall-5.1.73-win32\bin” 下,cmd命令: 2.1.开启 MySQL :mysqld --console;  关闭 MySQL :mysq

Django项目: 项目环境搭建 ---- 二、django项目设置

1.配置模板文件 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.

pycharm的Django项目设置

1. 点击项目配置 2. 编辑配置文件及设置 原文地址:https://www.cnblogs.com/nichengshishaonian/p/10802687.html

Django入门第一步:构建一个简单的Django项目

Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将按照以下步骤创建功能完备的Web应用程序,并一路学习框架的一些最重要的功能以及它们如何协同工作. 学习目标: 了解Django是什么以及为什么他是一个伟大的web框架 了解Django的体系结构以及与其他框架的对比 独立搭建一个简单的Django项目和应用程序(app) 2.为什么要学习Django

windows 下虚拟环境工具下django 项目创建

1.首先切换到之前安装的 虚拟环境工具 目录输入activate 激活脚本,接着进入python交互式行命令,导入django 模块,查看版本信息,退出exit(). G:\djangosite\env_mydjangosite\Scripts>activate (env_mydjangosite) G:\djangosite\env_mydjangosite\Scripts>pythonPython 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40)

Nginx+uwsgi或fastcgi部署Django项目

nginx+uwsgi ubuntu下先安装下C编译器和Python环境: sudo apt-get install build-essential python-dev 使用pip安装uwsgi: pip install uwsgi nginx配置: 可以单独为站点设置一个配置文件: sudo vim /etc/nginx/sites-enabled/mysite 或者直接在nginx.conf中设置: sudo vim /etc/nginx/nginx.conf 设置: server { l

Django,COOKIES,SESSION完成用户登入

1.urls.py """Django_cookie_session URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_ap