• python day20


    Form
        - 验证
        - 生成HTML标签
        - (select标签的数据:来源于数据)
       
    cookie

    session

    CSRF
       
       
    Model:
        一对多
            # 1,CEO    2,CIO    3,COO
            class UserType(models.Model):
           
                name = models.CharField(max_lenght=32)
               
           
            class UserInfo(models.Model):
           
                name = models.CharField(max_lenght=32)
                pwd = models.CharField(max_lenght=32)
                user_type = models.ForignKey('UserType')
           
            1、查询用户类是CEO所有用户
                q = UserInfo.objects.filter(user_type__name='CEO')
                QuerySet
                [对象,]
                q[0].name
                q[0].pwd
                q[0].user_type.name
            2、
                q = UserInfo.objects.filter(user_type__name='CEO').values('name','pwd','user_type__name')
                q
                [{'name':'xxx','pwd': 'xxx','user_type__name':'xxx'}]
               
            3、
                q = UserInfo.objects.filter(user_type__name='CEO').value_list('name','pwd','user_type__name')
                q
                [(xx,xx,xx),]
           
               
    补充:(select标签的数据:来源于数据)


            choices = [
                (1,'CEO'),
                (2,'COO')
            ]
           
            choices = UserType.objects.all().value_list('id','name')
           
           
           
           
    1.选择下接选项,创建表及数据

    urls.py
        from app01 import views
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^index/', view=views.index),
        ]   
       
       
       
    views.py
        from django.shortcuts import render,HttpResponse

        # Create your views here.
        from django import forms
        from app01 import models

        class IndexForm(forms.Form):
            c = [
                (1,'CEO'),
                (2,'COO'),
            ]


        def index(request):
            #创建数据
            # for i in range(10):
            #     models.UserType.objects.create(caption='CE'+str(i))
            # c = models.UserType.objects.all().count()
            form = IndexForm()
            return render(request,'index.html',{'form':form})


       
       
    models.py
        from django.db import models

        # Create your models here.
        class UserType(models.Model):
            caption = models.CharField(max_length=16)

        class UserInfo(models.Model):
            username = models.CharField(max_length=32)
            pwd = models.CharField(max_length=32)
            user_type = models.ForeignKey('UserType')
       
       
       
       
       
    settings.py
        INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'app01'
        ]
       
       
        STATIC_URL = '/static/'
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR,'static'),
        )


    index.html
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <h1>Index</h1>
            {{ form.user_type_id }}

        </body>
        </html>
       
       
    python3 manage.py makemigrations   
    python3 manage.py migrate


       
       
    访问
        http://127.0.0.1:8000/index/
       
       
       
    -------------------------------------------------------------------------------   

    页面创建数据
    http://127.0.0.1:8000/add_user_type/?q=CEO        #以?q=值 方式创建

    urls.py
        from app01 import views
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^index/', view=views.index),
            url(r'^add_user_type/',view=views.add_user_type),
        ]
           
       

    views.py
        from django.shortcuts import render,HttpResponse

        # Create your views here.
        from django import forms
        from app01 import models

        class IndexForm(forms.Form):
            # c = [
            #     (1,'CEO'),
            #     (2,'COO'),
            # ]
            # 获取数据
            c = models.UserType.objects.all().values_list('id','caption')
            user_type_id = forms.IntegerField(widget=forms.Select(choices=c))
            # pass

        def index(request):
            # for i in range(10):
            #     models.UserType.objects.create(caption='CE'+str(i))
            # c = models.UserType.objects.all().count()
            form = IndexForm()
            return render(request,'index.html',{'form':form})


        def add_user_type(request):
            q = request.GET.get('q', None)
            if q:
                models.UserType.objects.create(caption=q)
            return HttpResponse(q)
       


    models.py
        from django.db import models

        # Create your models here.
        class UserType(models.Model):
            caption = models.CharField(max_length=16)

        class UserInfo(models.Model):
            username = models.CharField(max_length=32)
            pwd = models.CharField(max_length=32)
            user_type = models.ForeignKey('UserType')


           
           
    settings.py
        INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'app01'
        ]
               
           
           
           
           
               
        STATIC_URL = '/static/'
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR,'static'),
        )


    index.html
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <h1>Index</h1>
            {{ form.user_type_id }}

        </body>
        </html>
           
           
           

    添加数据并访问
        http://127.0.0.1:8000/add_user_type/?q=CEO
        http://127.0.0.1:8000/index/
       
       
       
       
       
       
       
       
       
       
       


    ---------------------------------

    views.py

        from django.shortcuts import render,HttpResponse

        # Create your views here.
        from django import forms
        from app01 import models
        class IndexForm(forms.Form):
            # c = [
            #     (1,'CEO'),
            #     (2,'COO')
            # ]
            c = models.UserType.objects.all().values_list('id','caption')
            user_type_id = forms.IntegerField(widget=forms.Select(choices=c))

            def __init__(self,*args, **kwargs):
                # 父类构造方法:1、获取所有静态字段   2、fields = []
                super(IndexForm, self).__init__(*args, **kwargs)

                # print(self.fields['user_type_id'].widget.choices)
                self.fields['user_type_id'].widget.choices = models.UserType.objects.all().values_list('id','caption')

        def index(request):
            # for i in range(10):
            #     models.UserType.objects.create(caption='CE'+str(i))
            # c = models.UserType.objects.all().count()
            # print(c)
            form = IndexForm()
            from django.db.models import Q
            """
            q1 = Q()
            q1.connector = 'OR'
            q1.children.append(('id', 1))
            q1.children.append(('id', 2))
            q1.children.append(('id', 3))
            # 1 CE0
            # 2 CE1
            # 3 CE2

            obj = models.UserType.objects.filter(q1)
            for item in obj:
                print(item.id,item.caption)
            """
            con = Q()

            q1 = Q()
            q1.connector = 'OR'
            q1.children.append(('id', 1))
            q1.children.append(('id', 2))
            q1.children.append(('id', 3))

            q2 = Q()
            q2.connector = 'OR'
            q2.children.append(('caption', 'CE1'))
            q2.children.append(('caption', 'CE2'))

            con.add(q1, 'AND')
            con.add(q2, 'AND')

            obj = models.UserType.objects.filter(con)
            for item in obj:
                print(item.id,item.caption)

            return render(request, 'index.html', {'form': form})


        def add_user_type(request):
            q = request.GET.get('q', None)
            if q:
                models.UserType.objects.create(caption=q)
            return HttpResponse(q)

        def add_boy(request):
            boy = request.GET.get('v',None)
            if boy:
                models.Boy.objects.create(username=boy)
            return HttpResponse(boy)

        def add_girl(request):
            girl = request.GET.get('v',None)
            if girl:
                models.Girl.objects.create(name=girl)
            return HttpResponse(girl)

        def boy_to_girl(request):


            """
            ########### 增加数据 ###########
            # 获取一个女孩对象
            g1 = models.Girl.objects.get(id=1)

            # 获取一个男孩对象
            b1 = models.Boy.objects.get(id=1)

            # 利用对对多字段b将男孩和女孩建立关系
            g1.b.add(models.Boy.objects.get(id=1))
            g1.b.add(1)

            bs = models.Boy.objects.all()
            g1.b.add(*bs)
            g1.b.add(*[1,2,3])

            """

            """
            ########### 查询数据 ###########
            # 获取一个女孩对象
            g1 = models.Girl.objects.get(id=1)

            # 获取和当前女孩有关系的所有男孩
            boy_list = g1.b.all()
            print(boy_list)
            """

            """
            # 删除第三张表中和女孩1关联的所有关联信息
            g1 = models.Girl.objects.get(id=1)
            g1.b.clear()
            # 查询和女孩1关联所有男孩
            g1 = models.Girl.objects.get(id=1)
            boy_list = g1.b.all()
            print(boy_list)
            """

            """
            # 添加和女孩1和 男孩1,2,3,4关联
            # g1 = models.Girl.objects.get(id=1)
            # g1.b.add(*[1,2,3,4])
            # 删除女孩1和男孩1的关联
            g1 = models.Girl.objects.get(id=1)
            g1.b.remove(1)
            # 删除女孩1和男孩2,3的关联
            g1 = models.Girl.objects.get(id=1)
            g1.b.remove(*[2,3])
            # 查询和女孩1关联所有男孩
            g1 = models.Girl.objects.get(id=1)
            boy_list = g1.b.all()
            print(boy_list)
            """

            #查三张表,联合查询
            """
            r = models.Girl.objects.all().values('id','name','b__username')
            models.Boy.objects.all().values('id','username','girl__name')
            print(r)
            print(r.query)
            """

            """
            r = models.Boy.objects.all().values('id','username','girl__name')
            print(r)
            print(r.query)
            """
            r = models.Girl.objects.filter(id=1).values('b')
            print(r)
            print(r.query)

            return HttpResponse('ok')   
       
       
       
       
       
       
       
       
       
    中间件

       
    md/sb.py
        #!/usr/bin/env python
        #-*- coding:utf-8 -*-
        # Author:Minghu Wang


        from django.utils import deprecation

        class M1(deprecation.MiddlewareMixin):
            def process_request(self, request):
                print('M1.process_request')

            def process_response(self, request, response):
                print('M1.process_response')
                return response
        class M2(deprecation.MiddlewareMixin):
            def process_request(self, request):
                print('M2.process_request')

            def process_response(self, request, response):
                print('M2.process_response')
                return response
       
       
       
       
       
    settings.py
        MIDDLEWARE = [
            'md.sb.M1',
            'md.sb.M2',
            'django.middleware.security.SecurityMiddleware',
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.middleware.common.CommonMiddleware',
            'django.middleware.csrf.CsrfViewMiddleware',
            'django.contrib.auth.middleware.AuthenticationMiddleware',
            'django.contrib.messages.middleware.MessageMiddleware',
            'django.middleware.clickjacking.XFrameOptionsMiddleware',
        ]
       


    views.py
        def md(request):
            print('views.md')
            return HttpResponse('ok')

       
    views.py    
        from app01 import views
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^index/', view=views.index),
            url(r'^add_user_type/',view=views.add_user_type),
            url(r'^add_boy/',view=views.add_boy),
            url(r'^add_girl/',view=views.add_girl),
            url(r'^boy_to_girl/',view=views.boy_to_girl),
            url(r'^md/', views.md),
        ]
           
       
       
       
    http://127.0.0.1:8000/md/


        后台显示
            M1.process_request
            M2.process_request
            views.md
            M2.process_response
            M1.process_response

  • 相关阅读:
    android作业10.21
    安卓10.7作业
    安卓9.30
    9.23作业
    9.17安卓作业
    6.12作业
    5.29作业
    5.28上机作业
    leetcode 219
    策略模式
  • 原文地址:https://www.cnblogs.com/wangminghu/p/5898496.html
Copyright © 2020-2023  润新知