zoukankan      html  css  js  c++  java
  • 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('添加数据成功')
    一的数据填充
  • 相关阅读:
    图片懒加载DEMO
    手写offset函数
    DOM
    jQuery笔记
    children和 childNodes辨析
    运算符...典型的三种用处
    Python中的数据结构---栈,队列
    手写call方法
    移动零元素--leetcode题解总结
    剑指 Offer 36. 二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/13849018.html
Copyright © 2011-2022 走看看