Python学习之路—2018/7/4

Python学习之路—2018/7/4

简介

浏览器缓存,是一种key-value结构。浏览器第一次访问服务器的时候cookie为空,服务器会创建一个cookie并响应给浏览器,浏览器会储存cookie,等到下一次访问这个服务器时会将携带的cookie发送给服务器,服务器变可以识别出客户端。

规范

  • Cookie大小最大为4KB
  • 一个服务器最多在浏览器上保存20个Cookie
  • 一个浏览器最多保存300个Cookie

注意:

  • 不同浏览器之间不共享Cookie
  • 服务端发送重复的Cookie会覆盖掉原有的Cookie

语法

cookie = HttpResponse() 或cookie = render(request, ) 或cookie =  rediret()
cookie.set_cookie(key, value)
set_cookie(key, value, max_age=xx,  expires=xx, path="/xx")
"""
key: 键
value: 值
max_age: cookie存在的时间,以秒为单位
expires: cookie失效的具体时间
path: cookie生效的地址,其余的路径cookie不会被传递
"""

views.py

from django.shortcuts import render, HttpResponse, redirect
from .models import UserInfo


def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    elif request.method == "POST":
        username = request.POST.get("username")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(username=username, pwd=pwd).first()

        if user:
            cookie = HttpResponse("登陆成功")
            cookie.set_cookie("is_login", True, max_age=10)  # 5s以后cookie失效,刷新index路径时会跳转到登录界面
            cookie.set_cookie("username", user.username,  path='/index')  # cookie中的username只会在index路径存在
            return cookie
        else:
            return redirect("/login/")


def index(request):
    is_login = request.COOKIES.get("is_login")
    if is_login:
        username = request.COOKIES.get("username")
        return render(request, "index.html", locals())
    else:
        return redirect("/login/")

cookie失效(10s后)实现效果:
005ScGy0gy1fsxtbealetg30d003ajs3.gif

cookie生效路径(/index)实现效果:
005ScGy0gy1fsxtjubk91j311s09q76x.jpg

005ScGy0gy1fsxtk1lahcj311t09fmzr.jpg

2.Session

简介

是服务端技术,存储在服务端,给每个浏览器创建独立的session对象,存储在django_session表中,用户通过浏览器访问服务器时从各自的session对象中取得数据。

语法

设置session request.session["xx"] = xx

获取session request.session.get("xx")

删除session del request.session["xx"]

删除会话 request.session.flush() 主要用于注销用户

基本流程

设置session
  1. 生成随机字符串str

  2. response.set_cookie("sessionid", str)

  3. 向django_session表中插入数据:

    session_keysession_dataexpire_date
    随机字符串str{"xxx":xxx, "xxx":xxx ....}xxxx-xx-xx
获取session
  1. session = request.Cookie.get("session")

  2. 从django_session表中过滤数据

    obj = django_session.object.filter(session_key = session ).first()

  3. 拿到具体的数据

    obj.session_data.get("xxx")

删除会话(flush)
  1. session = request.Cookie.get("session")
  2. django_session.object.filter(session_key = session ).delete()
  3. request.delete_cookie("sessionid", session)

Session更新

当创建session时,第一步会先判断浏览器是否携带的cookie中是否含有session_key,如果有则不更改session_key,覆盖session_data信息(前提是登录的用户不变),如果没有则会添加新的session_key 与session_data,比如A已经登录了谷歌浏览器,下一次再用谷歌浏览器登录时,会携带包含session_key的cookie信息,服务器接受之后不会增加新的session对象,而是找到该浏览器对应的session数据,覆盖修改上一次存储于的session_data,如果A用火狐浏览器登录时服务器则会创建火狐浏览器对应的session数据。

配置

settings.py

SESSION_COOKIE_NAME = "sessionid"  # Session的cookie保存的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/"  # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None  # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False  # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True  # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600  # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False  # 是否每次请求都保存Session,默认修改之后才保存(默认)

3.用户认证组件

auth模块

前提

首先需要在django自动创建的auth_user表中添加记录

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

005ScGy0gy1fsy3ljfurrj30eb04o3yh.jpg

基本语法
authenticate()

用户认证方法,需要username以及password两个参数(取决于auth_user表中username和password两个字段),当认证信息成功时,会返回一个user对象。

from django.contrib import auth
user = auth.authenticate(username=xxx, password=xxx)
login(request, user)

调用django中的session框架并给认证的用户添加session信息

views.py

from django.contrib import auth
def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    username = request.POST.get("username")
    password = request.POST.get("password")

    user = auth.authenticate(username=username, password=password)
    if user:
        auth.login(request, user)  # request.user
        return redirect("/index")
    else:
        return redirect("/login")
    
   def index(request):
    if request.user.username:
        return render(request, "index.html")
    else:
        return redirect("/login")

login.html

<form action="" method="post">
    {% csrf_token %}
    用户名<input type="text" name="username">
    密码<input type="text" name="password">
    <input type="submit" value="提交">
</form>

index.html

<h2>欢迎您,{{ request.user.username }}</h2>

实现效果:

005ScGy0gy1fsy3yfz0seg30e101laan.gif

logout(request)

清除当前请求的所有session信息

views.py

def logout(request):
    auth.logout(request)
    return redirect("/login")

index.html

<a href="/logout">注销</a>

实现效果:

005ScGy0gy1fsy46lj9wvg30e102laan.gif

User对象

is_authenticated()

如果是一个User对象,则会返回True,主要用于验证用户登录

create_user()

用于注册创建用户

from django.contrib.auth.models import User

User.objects.create_user(username=xxx, password=xxx, email=xxx)
check_password()

用于修改密码,首先获取用户的输入的旧密码,匹配成功后输入新密码并修改

user = User.objects.get(username = “ ”)
user.set_password(password = “ ”)
user.save
login_required()

装饰器,只有当用户登录的时候才可以访问的地址

settings.py

LOGIN_URL = '/login/'  # 当非登录用户访问被装饰器login_required修饰的地址时返回的url

views.py

from django.contrib.auth.decorators import login_required

@login_required
def hello(request):
    return HttpResponse("hello world")

实现效果:

005ScGy0gy1fsy7xt0i0eg30e102xglw.gif

转载于:https://www.cnblogs.com/ExBurner/p/9265873.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值