Django服务端建设的一些细节记录

URL路由相关的配置细节

  1. 在正常app里的urls.py文件中,通常需要设置app_name参数,该参数的效果是对该app下的所有相对路径加上namespace
  2. 在正常app里的urls.py文件中,urlpatterns中的路径最好都设置各自独一无二的名称,以便后续通过django自带的函数快速进行解析
  3. 当views.py中的函数需要进行其他路径的跳转时,为了避免硬编码,应该使用reverse("namespace:url_name")的方式,然后使用return redirect(reverse("namespace:url_name"))的方式进行跳转,例如如下代码:
    from django.shortcuts import render, redirect
    from django.urls import reverse
    
    
    def index(request):
       # some code......
       if need_redirect:
            return redirect(reverse("namespace:url_name"))  #若需要参数,则使用reverse("namespace:url_name", args=(val1,val2,)
       return render(request, "index.html")

用户登录的相关实现

SessionID的生成和使用

  1. 在用户发送Post登录请求并且验证通过后,服务端views.py中的函数需要对request的session设置具体验证内容,例如如下代码:
    def login(request):
        # some other_code
        if login_success:
            request.session['is_login'] = True
            request.session['uid'] = 123456  # set user ID
            return redirect(reverse("namespace:url_name"))

    该步骤将:

    1. 生成随即字符串

    2. 把随机字符串和设置的用于后续校验的键值对保存到django_session表的session_key和session_data中

    3. 设置cookie: set_cookie("sessionid", 子步骤1生成的随机字符串),并且响应给浏览器

  2. 当用户继续请求相关服务且需要验证登录状态时,对request中的session获取具体的验证内容进行校验,例如如下代码:
    def session_index(request):
        status = request.session.get('is_login')
        if not status:
            return redirect(reverse("namespace:logout_url"))
        return render(request, "index.html")

    该步骤将:

    1. 从cookie中获取sessionid的值

    2. 根据sessionid从django_session表中过滤出记录

    3. 取出目标校验值(如上述示例中的is_login)

  3. 当用户尝试注销时,可以使用如下任意一个命令:

    1. request.session.flush()  # 删除整个session

    2. del request.session["key"] # 删除session中的某个键值对

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值