使用django框架实现登陆页面(将登陆用户的记录保存在浏览器cookie中)

1、创建url

 path('login/',account.login),

2、登陆html页面

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    <style>
        .account {
            width: 400px;
            border: 1px solid #dddddd;
            border-radius: 5px;
            box-shadow: 5px 5px 20px #aaa;

            margin-left: auto;
            margin-right: auto;
            margin-top: 100px;
            padding: 20px 40px;
        }

        .account h2 {
            margin-top: 10px;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="account">
    <h2>用户登陆</h2>
    <form method="post" novalidate>
        {#        novalidate去掉自身所带的错误提示没填东西直接提交#}
        {#        使用post请求需要加上#}
        {% csrf_token %}
        <div class="form-group">
            <label>用户名</label>
            {{ form.username }}
            <span style="color: red">{{ form.username.errors.0 }}</span>
        </div>
        <div class="form-group">
            <label>密码</label>
            {{ form.password }}
            <span style="color: red">{{ form.password.errors.0 }}</span>
        </div>
        <input type="submit" value="登 陆" class="btn btn-primary">
    </form>
</div>

</body>
</html>

3、视图函数的书写

from django.shortcuts import render,redirect
from app01.utils.bootstrap import BootStrapForm
from django import forms
from app01.utils.encrypt import md5
from app01 import models

class LoginForm(BootStrapForm):
    username=forms.CharField(
        label="用户名",
        widget=forms.TextInput,
        # 设置为必填属性
        required=True

    )
    password=forms.CharField(
        label="密码",
        widget=forms.PasswordInput(render_value=True),
        required=True
    )

    def clean_password(self):
        pwd=self.cleaned_data.get("password")
        return md5(pwd)
def login(request):
    if request.method=="GET":
        form=LoginForm()
        return render(request,'login.html',{"form":form})

    form=LoginForm(data=request.POST)
    if form.is_valid():
        admain_object = models.Admin.objects.filter(**form.cleaned_data).first()
        if not admain_object:
            # 在password字段下显示
            form.add_error("password","用户名或密码错误")
            return render(request,'login.html',{'form':form})
        # 用户名和密码都正确
        # 网站生成随机字符串;写到用户浏览器的cookie;在写入到session中
        request.session["info"]={'id':admain_object.id,'name':admain_object.username}
        return redirect("/admain/list/")

    return render(request, 'login.html', {'form': form})

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
记录当前设备的访问记录,可以使用Django的session框架。通过session,可以将数据存储在服务器端,而不是在用户的设备上,从而实现设备之间的数据共享。 首先,需要在Django的settings.py文件配置session: ```python SESSION_ENGINE = 'django.contrib.sessions.backends.db' SESSION_COOKIE_NAME = 'myapp_session' SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_SAVE_EVERY_REQUEST = True ``` 其,`SESSION_ENGINE`指定session的存储引擎,这里使用数据库存储;`SESSION_COOKIE_NAME`指定cookie的名称;`SESSION_EXPIRE_AT_BROWSER_CLOSE`设置为True时,表示关闭浏览器后session会自动过期;`SESSION_SAVE_EVERY_REQUEST`设置为True时,表示每次请求都会保存session。 接下来,在视图函数可以使用session来记录设备的访问记录: ```python def index(request): device = request.META.get('HTTP_USER_AGENT') visited_devices = request.session.get('visited_devices', []) if device not in visited_devices: visited_devices.append(device) request.session['visited_devices'] = visited_devices return render(request, 'index.html', {'visited_devices': visited_devices}) ``` 在这个视图函数,首先获取请求头`HTTP_USER_AGENT`字段,该字段包含了设备的信息。然后从session获取之前访问过的设备列表,如果当前设备不在列表,则将其添加到列表,并更新session的数据。最后将访问过的设备列表传递给模板,以便在页面上显示。 在模板,可以使用Django模板语言来遍历访问过的设备列表,并显示在页面上: ```html {% if visited_devices %} <h2>Visited Devices:</h2> <ul> {% for device in visited_devices %} <li>{{ device }}</li> {% endfor %} </ul> {% endif %} ``` 这样就可以记录当前设备的访问记录了。需要注意的是,session保存的数据是有限制的,如果访问记录比较多,需要定期清除过期的数据,以免占用过多的服务器资源。可以通过Django的session清理机制来进行清理,具体可以参考Django的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值