• day109-django-多对多、session保存用户信息到数据库和从数据库获取用户信息



    1.account.py 跟账户相关的登录和注销写在这里 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': #如果是男的,就从Boy表中去查找 obj = models.Boy.objects.filter(username=user,password=pwd).first() else: # 如果是女的,就从Girl表中去查找 obj = models.Girl.objects.filter(username=user,password=pwd).first() #如果没有这个对象,说明用户名或密码错误,返回登录页面 if not obj: return render(request,'login.html',{'error':'用户名或密码错误'}) else: #登录成功,设置session,把用户信息保存到数据库 #随机字符串自动生成,我们添加键值对即可,记住request.session是字典 #{ # 随机字符串:{'user_id':obj.id,'gender':gender,'username':user} # } # request.session['user_id'] = obj.id # request.session['gender'] = gender # request.session['username'] = user #下面方法是只需要通过'user_info'这个key就可以一次拿到用户所有信息 # { # 随机字符串:{ 'user_info':{'user_id':obj.id,'gender':gender,'username':user,'nickname':obj.nickname} } # } request.session['user_info'] = {'user_id':obj.id,'gender':gender,'username':user,'nickname':obj.nickname} return redirect('/index.html') #注销 def logout(request): #删除数据库的session的随机字符串 request.session.delete(request.session.session_key) #返回登录页面 return render(request,'login.html')
    2.love.py 查看男生或女生列表的写在这
    
    from django.shortcuts import render,HttpResponse,redirect
    from app01 import models
    
    #查看男生或女生列表
    def index(request): v = request.session.get('user_info') #如果没有v,说明没登录,简单的情况先写上面,让代码看起来比较简洁一些 if not v: return redirect('/login.html') #如果是男生,查看女生列表,如果是女生,就查看男生列表 gender = request.session.get('user_info').get('gender') if gender == '1': user_list = models.Girl.objects.all() else: user_list = models.Boy.objects.all() #request传给了index.html,所以在index.html里面可以直接使用request.session.user_info.nickname return render(request,'index.html',{'user_list':user_list})
    #查看跟当前登录用户有关系的异性列表
    def others(request): 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') # id b_id g_id g__nickname # 1 1 1 marry # 1 1 1 lili else: user_list = models.B2G.objects.filter(g_id=current_user_id).values('b__nickname') return render(request,'others.html',{'user_list':user_list})
    3.urls.py
    
    from django.contrib import admin
    from django.urls import path
    
    from app01.views import account
    from app01.views import love
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('login.html', account.login),
        path('logout.html', account.logout),
        path('index.html', love.index),
        path('others.html', love.others),
    ]
    4.login.html
    
    <body>
        <h3>昵称:</h3>
        <form method="POST" action="/login.html">
            {% csrf_token %}
            <p>用户名:
                <input type="text" name="username">
            </p>
            <p>密码:
                <input type="password" name="password">
            </p>
            <p>性别:
                <label><input type="radio" name="gender" value="1"></label>
                <label><input type="radio" name="gender" value="2"></label>
            </p>
            <p>
                <input type="checkbox" name="rmb" value="11">一个月免登陆
            </p>
            <p><input type="submit" value="提交"></p>
            <span style="color:red">{{ error }}</span>
        </form>
    </body>
    5.index.html
    
    <body>
    {% include 'user_header.html' %}
    
    <h3>异性列表</h3>
    <p><a href="/others.html">跟我有关系的异性列表</a></p>
    
    <ul>
        {% for row in user_list %}
            <li>{{ row.nickname }}</li>
        {% endfor %}
    </ul>
    
    </body>
    6.others.html
    
    <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 %}
    
        <!--以下方法也可以,只需要把gender传进来-->
    {#    {% for row in user_list %}                    #}
    {#        {% if gender == '1' %}                    #}
    {#            <li>{{ row.g__nickname }}</li>        #}
    {#        {% else %}                                #}
    {#            <li>{{ row.b__nickname }}</li>        #}
    {#        {% endif %}                               #}
    {#    {% endfor %}                                  #}
    
    </ul>
    </body>
    7.user_header.html 小组件
    
    <h1>昵称:{{ request.session.user_info.nickname }}</h1>
    <p><a href="/logout.html">注销</a></p>

     

  • 相关阅读:
    刷题篇--热题HOT 71-80
    刷题篇--热题HOT 61-70
    双飞翼布局介绍-始于淘宝UED
    css布局——百度前端技术学院
    CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
    CSS之BFC详解
    深入理解BFC和Margin Collapse
    CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
    3列、2列自适应布局,中部内容优先显示3列布局等方法
    三列布局,中间自适应
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12822330.html
Copyright © 2020-2023  润新知