Django 基于session认证 小作业

Posted karina梅梅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Django 基于session认证 小作业的主要内容,如果未能解决你的问题,请参考以下文章

Django的认证系统

Django-基于session的登录

Django会话,用户和注册之用户认证

[oldboy-django][3作业汇总]相亲网

用户认证:基于jwt和session的区别和优缺点

Django 认证系统