854594834-YT

DjangoORM多对多案例!

一、数据准备

from django.db import models

# Create your models here.
class Boy(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=63)

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

class B2G(models.Model):
    b = models.ForeignKey(Boy, on_delete=models.CASCADE)
    g = models.ForeignKey(Girl, on_delete=models.CASCADE)
数据表
from django.http import HttpResponse

from app01 import models
def init_models(request):
    # 管理员验证,保证数据安全性
    #
    girls = [
        models.Girl(nickname=\'娜美\', username=\'namei\', password=\'123\'),
        models.Girl(nickname=\'老幺\', username=\'laoyao\', password=\'123\'),
        models.Girl(nickname=\'女帝\', username=\'nvdi\', password=\'123\')
    ]
    models.Girl.objects.bulk_create(girls, 10)
    boys = [
        models.Boy(nickname=\'路飞\', username=\'lufei\', password=\'123\'),
        models.Boy(nickname=\'柒禾\', username=\'qihe\', password=\'123\'),
        models.Boy(nickname=\'索隆\', username=\'zoro\', password=\'123\')
    ]
    models.Boy.objects.bulk_create(boys, 10)
    love = [
        models.B2G(b_id=\'1\', g_id=\'1\'),
        models.B2G(b_id=\'1\', g_id=\'3\'),
        models.B2G(b_id=\'2\', g_id=\'2\'),
        models.B2G(b_id=\'3\', g_id=\'2\'),
        models.B2G(b_id=\'2\', g_id=\'3\'),
    ]
    models.B2G.objects.bulk_create(love, 10)
    return HttpResponse(\'添加数据成功\')
数据填充

二、前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/app01/myLogin.html" method="POST">
        {% csrf_token %}
        <p>用户名:<input type="text" name="username"></p>
        <p>密码: <input type="password" name="password"></p>
        <p>
            性别:
            男 <input type="radio" name="gender" value="1"><input type="radio" name="gender" value="2">
        </p>
        <input type="submit" value="提交">{{ msg }}
        <p><input type="checkbox" name="rmb" value="True">一个免登陆</p>
    </form>
</body>
</html>
myLogin.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% include \'user_header.html\' %}
    <h3>异性列表</h3>
    <a href="/app01/others.html">查看和我有关系的异性</a>
    <ul>
        {% for row in user_list %}
            <li>{{ row.nickname }}</li>
        {% endfor %}
    </ul>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% include \'user_header.html\' %}
<p>其他异性</p>
    <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
<h1>当前用户:{{ request.session.user_info.nickname }}</h1>
<h1>{{ request.session.user_info }}</h1>
<a href="/logout.html">注销</a>
user_header.html

三、路由系统

"""day74 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path(\'\', views.home, name=\'home\')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path(\'\', Home.as_view(), name=\'home\')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path(\'blog/\', include(\'blog.urls\'))
"""
from django.contrib import admin
from django.urls import path, re_path, include
from day74 import views
import app01
urlpatterns = [
    # path(\'admin/\', admin.site.urls),
    # path(\'test/\', views.test),
    # path(\'test1/\', views.test_ajax),
    # re_path(r\'^login$\', views.login),#显示ajax登录页面
    # re_path(r\'^login_ajax_check$\', views.login_ajax_check),#显示ajax登录校验
    path(\'app01/\', include(\'app01.urls\')),
]
主urls
"""day74 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path(\'\', views.home, name=\'home\')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path(\'\', Home.as_view(), name=\'home\')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path(\'blog/\', include(\'blog.urls\'))
"""
from django.urls import path
from app01.views import account, love, init_models

urlpatterns = [
    path(\'myLogin.html\', account.myLogin),
    path(\'others.html\', love.others),
    path(\'index.html\', love.index),
    path(\'init_models.html\', init_models.init_models)
]
app01.urls

四、视图函数

 

 

from django.http import HttpResponse
from django.shortcuts import render, redirect

from app01 import models

def myLogin(request):
    if request.method == \'GET\':
        return render(request, \'myLogin.html\')
    else:
        user = request.POST.get(\'username\')
        pwd = request.POST.get(\'password\')
        gender = request.POST.get(\'gender\')
        rmb = request.POST.get(\'rmb\')
        print(user, pwd, gender)
        # 获取用户对象
        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, \'myLogin.html\', {\'msg\': \'用户名或者密码错误\'})
        else:
            request.session[\'user_info\'] = {\'user_id\': obj.id, \'gender\': gender, \'username\': user, \'nickname\': obj.nickname}
            return redirect(\'/app01/index.html\')
account
from django.shortcuts import redirect, render

from app01 import models

def index(request):
    if not request.session.get(\'user_info\'):
        return redirect(\'/login.html\')
    else:
        gender = request.session.get(\'user_info\').get(\'gender\')
        if gender == \'1\':
            user_list = models.Girl.objects.all()
        else:
            user_list = models.Boy.objects.all()
        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\')
    else:
        user_list = models.B2G.objects.filter(g_id=current_user_id).values(\'b__nickname\')
    print(\'result\', user_list)
    return render(request, \'others.html\', {\'user_list\': user_list})
love
from django.http import HttpResponse

from app01 import models
def init_models(request):
    # 管理员验证,保证数据安全性
    #
    girls = [
        models.Girl(nickname=\'娜美\', username=\'namei\', password=\'123\'),
        models.Girl(nickname=\'老幺\', username=\'laoyao\', password=\'123\'),
        models.Girl(nickname=\'女帝\', username=\'nvdi\', password=\'123\')
    ]
    models.Girl.objects.bulk_create(girls, 10)
    boys = [
        models.Boy(nickname=\'路飞\', username=\'lufei\', password=\'123\'),
        models.Boy(nickname=\'柒禾\', username=\'qihe\', password=\'123\'),
        models.Boy(nickname=\'索隆\', username=\'zoro\', password=\'123\')
    ]
    models.Boy.objects.bulk_create(boys, 10)
    love = [
        models.B2G(b_id=\'1\', g_id=\'1\'),
        models.B2G(b_id=\'1\', g_id=\'3\'),
        models.B2G(b_id=\'2\', g_id=\'2\'),
        models.B2G(b_id=\'3\', g_id=\'2\'),
        models.B2G(b_id=\'2\', g_id=\'3\'),
    ]
    models.B2G.objects.bulk_create(love, 10)
    return HttpResponse(\'添加数据成功\')
一的数据填充

 

发表于 2020-10-20 21:10  路神  阅读(70)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-09-12
  • 2022-12-23
  • 2021-10-31
  • 2022-02-17
  • 2021-09-15
猜你喜欢
  • 2022-12-23
  • 2021-08-26
  • 2021-09-23
  • 2022-01-01
  • 2021-10-15
  • 2022-12-23
  • 2022-01-07
相关资源
相似解决方案