Django 基于session认证 小作业

基于session认证  相亲小作业

用户登录  如果男用户登录,显示女生列表
             如果女用户登录,显示男生列表

  

"""s4day74 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r‘^$‘, views.home, name=‘home‘)
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r‘^$‘, Home.as_view(), name=‘home‘)
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r‘^blog/‘, include(‘blog.urls‘))
"""
from django.conf.urls import url
from django.contrib import admin
from app01.views1 import love
from app01.views1 import account
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    # url(r‘^test.html$‘,views.test),
    # url(r‘^login/‘, views.login),
    # url(r‘^index/‘, views.index),
    # url(r‘^test.html$‘, love.test),
    url(r‘^login.html$‘, account.login),
    url(r‘^index.html$‘, love.index),
    url(r‘^logout.html$‘, account.logout),
    url(r‘^others.html$‘, love.others),

]

urls

from django.db import models

# Create your models here.

# class UserInfo(models.Model):

class Boy(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

class Girl(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

class B2G(models.Model):
    b = models.ForeignKey(to="Boy",to_field="id")
    g = models.ForeignKey(to="Girl",to_field="id")

models

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

def login(request):
    if request.method == "GET":
        return render(request, ‘login.html‘)

    else:
        user=request.POST.get("username")
        pwd=request.POST.get("password")
        gender=request.POST.get("gender")
        rmb=request.POST.get("rmb")
        #性别判断
        if gender=="1":
           obj=models.Boy.objects.filter(username=user,password=pwd).first()
        else:
            obj=models.Girl.objects.filter(username=user,password=pwd).first()
        if not obj:
            return render(request, "login.html", {"msg": "用户名或密码错误"})

        else:
            #session里面设置值,可以嵌套 相当于归类 一个key对应一条条信息
            # request.session[‘user_id‘]=obj.id
            # request.session["gender"]=gender
            # request.session["username"]=user
            if rmb:
                request.session.set_expiry(15)
            request.session[‘user_info‘]={‘user_id‘:obj.id,‘gender‘:gender,‘username‘:user,‘nickname‘:obj.nickname}
            return redirect("/index.html")    #跳到后台管理

def logout(request):
    if request.session.get("user_info"):
        request.session.clear()
        return redirect(‘/login.html‘)

account.py

from django.shortcuts import render,HttpResponse,redirect
from app01 import models
from utils.pager import PageInfo

def index(request):
    if not request.session.get("user_info"):
        return redirect("/login.html")
    else:
        #到session里面获取性别
        gender=request.session.get("user_info").get(‘gender‘)
        if gender == "1":
            # user_list=models.Girl.objects.all()
                all_count = models.Girl.objects.all().count()
                page_info = PageInfo(request.GET.get(‘page‘), all_count, 10, ‘/boy.html‘, 11)
                user_list = models.Girl.objects.all()[page_info.start():page_info.end()]
                return render(request, ‘index.html‘, {‘user_list‘: user_list, ‘page_info‘: page_info})
        else:
            # user_list=models.Boy.objects.all()
            all_count = models.Boy.objects.all().count()
            page_info = PageInfo(request.GET.get(‘page‘), all_count, 10, ‘/boy.html‘, 11)
            user_list = models.Boy.objects.all()[page_info.start():page_info.end()]
            return render(request, ‘index.html‘, {‘user_list‘: user_list, ‘page_info‘: page_info})

        # return render(request,"index.html",{‘user_list‘:user_list})

def others(request):
    """
    获取与当前用户有关的异形
     :param request:
    :return:
    """
    current_user_id=request.session.get(‘user_info‘).get("user_id")
    gender=request.session.get("user_info").get("gender")
    if gender == "1":
      user_list=models.B2G.objects.filter(b_id=current_user_id).values(‘g__nickname‘)
    else:
      user_list=models.B2G.objects.filter(g_id=current_user_id).values(‘b__nickname‘)
    return render(request,‘others.html‘,{‘user_list‘:user_list})

love.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% include ‘user_header.html‘ %}
    <h1>有关系的异性列表</h1>
    <ul>
    {% for row in user_list%}
        {% if row.g__nickname %}
            <li>{{ row.g__nickname }}</li>
        {% else %}
            <li>{{ row.b__nickname }}</li>
        {% endif %}
    {% endfor %}
    </ul>
</body>
</html>

login.html

!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.css">
</head>
<body>
{#    <h2>当前用户:{{ request.session.user_info.nickname }}</h2>#}
{#    <a href="/logout.html">注销</a>#}
    {% include ‘user_header.html‘ %}
    <h3>异性列表</h3>
    <a href="/others.html">查看和我有关的异形</a>
<table class="table table-striped table-bordered table table-hover table table-condensed">
  <tr>
    <th>ID</th>
    <th>姓名</th>
    <th>密码</th>
    </tr>
 {% for row in user_list %}
  <tr>
        <td>{{ row.id }}</td>
        <td>{{ row.nickname }}</td>
        <td>{{ row.password }}</td>
  </tr>
    {% endfor %}

</table>
<nav aria-label="Page navigation">
    <ul class="pagination">
      {{ page_info.pager|safe }}
    </ul>
</nav>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% include ‘user_header.html‘ %}
    <h1>有关系的异性列表</h1>
    <ul>
    {% for row in user_list%}
        {% if row.g__nickname %}
            <li>{{ row.g__nickname }}</li>
        {% else %}
            <li>{{ row.b__nickname }}</li>
        {% endif %}
    {% endfor %}
    </ul>
</body>
</html>

others.html

 <h2>当前用户:{{ request.session.user_info.nickname }}</h2>
 <a href="/logout.html">注销</a>

user_header.html

时间: 2025-01-04 12:17:24

Django 基于session认证 小作业的相关文章

Django之cookie,session,认证系统auth

COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了. cookie虽然在一定程度上解决了“保持状态”的需求,但是由于cookie本身最大支持4096字节,以及cookie本身保存在客户

Django--分页器(paginator)、Django的用户认证、Django的FORM表单

分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >>> p.count #数据总数 4 >>> p.num_pages #总页数 2 >>> type(p.page

Django之Session

Django  -- Seeion介绍 问:       Django的session是什么? 答:       Django 完全支持匿名 Session的. Session 框架允许每一个用户保存并取回数据.它将数据保存在服务器端,并将发送和接收, Cookie的操作包装起来.在 Cookie 中包含的是 Session ID,而不是数据本身. 好了回到正题,那么我们来简单的使用一下Session把. 壹:Seeion的简单使用 def index(request): # 获取.设置.删除S

Django之session验证的三种姿势

一.什么是session session是保存在服务端的键值对,Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中. 二.FVB中使用装饰器进行session验证 认证装饰器: # 登陆验证 def auth(func): '''判断是否登录装饰器''' def inner(request, *args, **kwargs): ck = request.session.get("username") '''如果没有登

Django Authentication 用户认证系统

一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否是合法用户,权限管理则是决定一个合法用户具有哪些权限.这里,"身份验证"这个词同时代指上面两部分的含义. 系统主要包括: 用户 许可 组 可配置的密码哈希系统 用于用户登录或者限制访问的表单和视图工具 可插拔的后端 类似下面的问题,请使用第三方包: 密码强度检

Django REST framework - 认证

目录 认证 DRF 5种验证方式 如何确定身份验证? 设置身份验证方案 案例: 基于自定义Token认证 第一步: 定义一个用户表和一个保存用户Token的表 第二步: 定义一个登陆视图 第三步定义一个认证类 第四步: 使用认证类 认证 (我是谁?) 身份认证是将传入请求与一组标识凭据相关联的机制,然后,权限和限制策略可以使用这些凭据来确定是否应该允许该请求. REST框架提供了许多开箱即用的身份验证方案,还允许您实现自定义方案. 身份验证始终在视图的最开始,在发生权限和限制检查之前,以及允许任

Django之Session与Cookie

目录 一.cookie Cookie与的session由来 什么是Cookie Cookie的原理 查看Cookie cookie与session的作用 二.Django中操作Cookie 获取Cookie 设置Cookie 删除Cookie 三.Session Session的由来 设置session 获取session 四.设置session与cookie的超时时间 删除当前的会话数据并删除会话的Cookie(推荐) 五.Django中Session相关方法 Session流程解析 Sess

Python学习day13 Django 分页/Session/Cookie

Created on 2017年5月3日 第1课:上节作业简介 鼠标放上表单后进入编辑模式-----需学习----CMDB里会学到模态对话框里--弹出对话框---对后台进行操作---方式:1 Form-用Submit页面整个刷新 2 用Ajax后台请求,通过Sessuss方式返回数据来控制模态对话框 第2课:本节内容1第3课:本节内容2 第4课:django自定义分页一 28minutes第5课:django自定义分页二 35minutes url(r'^index/(\d*)', views.

django中的认证登陆与用户的创建

---恢复内容开始--- from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1  authenticate()   提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的.当我们