• 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
  • 相关阅读:
    Linux文件系统之INode
    手写Netty之多路复用Select小案例
    多路复用器Select、Poll、Epoll区别梳理
    NAT模式、路由模式、桥接模式的区别
    Netty编解码器(理论部分)
    Netty之Unpooled_Bytebuf
    为什么 TCP 协议有粘包问题
    IDEA_2019.1版本中Protobuf的使用
    Netty服务端Server代码说明
    Netty之ChannelHandler
  • 原文地址:https://www.cnblogs.com/niejinmei/p/7123272.html
Copyright © 2020-2023  润新知