web开发第七课用户登录

一、cookie和session概念

网站登录后

后面的操作,服务端怎么知道是前面登录的用户操作的呢

http协议被称为无状态协议

访问前面的网页的http请求和访问后面网页的http请求是互不相干的,是独立的

答案是 cookie

cookie是我们访问一个网站时,通常由网站服务器返回的一种标记为cookie类型数据

要求我们存储在浏览器所在的电脑上

以后每次访问本网站时,浏览器都会在http请求中将该数据发送过来

cookie的作用:前端使用

1、比如,用户登录后,服务端可以返回用户的姓名、等级等

2、4k大小限制

3、前端信息可以更改

4、每次请求http消息里面后会带着(隐藏信息不能放里面,而且不能太大)

服务端的使用:sessionid

1、浏览器发出用户登录请求

2、服务器可以在验证通过后,创建一个随机产生的字符串,称之为sessionid,标志着这次登录,放在http响应消息里面,作为一个cookies返回给浏览器

3、同时,自己在一张表(通常是数据库)中记录下类似这样的信息

cdscsdgsgs23derfe4:{

userid:23,

username:zhngdsd,

......

}

cdscsdgsgs23derfe4叫sessionid或sessionkey,后面叫session data

返回给浏览器的是id,data是存储在后端的

不会把data存在前端,如果那样,就失去了安全性

sessionid重复的可能性为0,服务端程序保证


实现用户功能

Django内置用户认证登录系统

 django.contrib.auth 和 django.contrib.sessions

对应的数据库: auth_user和django_sessions

在settings.py中有

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dandan'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
创建两种用户

管理员

python manage.py createsuperuser

学生用户

管理员登录后在web网页上创建

在数据库修改课程



# 修改课程处理
def modify_course(request):


    record = Course.objects.get(id=request.params['id'])

    # 由于是json编码,这里需要解码为对象
    newdata = json.loads(request.params['newdata'])
    record.name = newdata['name']
    record.desc = newdata['desc']
    record.display_idx = newdata['display_idx']

    record.save()
重定向问题

前端发送的api过来,后端的代码,直接就响应了

并没有验证这个请求是否是一个登录后的用户发出来了

我们需要验证是否是登录用户,如果不是,最好重定向到该用户对应的登录界面

重定向

返回http请求status是320,还有一个目的地地址url

浏览器收到该请求,就自动访问目的地址url



装饰器



但是这是前后端分离,ajax异步请求,但是不刷新

from django.http import JsonResponse
def ALR(view_func):
    def wrapper(request, *args, **kwargs):
        if request.user.is_authenticated():
            return view_func(request, *args, **kwargs)
        return  JsonResponse({'retcode':302,'redirect':'/login.html'})
    return wrapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值