day20-Django3

---恢复内容开始---

1、补充
  Form
    - 验证
    - 生成HTML标签
    - (select标签的数据:来源于数据)

  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‘)

from django import forms

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 index(request):

    form = IndexForm()
    return render(request, ‘index.html‘, {‘form‘: form})

View_form

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

</body>
</html>

View_form_index

2、model操作 F/Q
    F:
        temp = salary+500
        models.UserInfo.objects.filter().update(salary=temp)
        update userinfo set salary=salary+500
        
        from django.db.models import F
        models.UserInfo.objects.filter().update(salary=F(‘salary‘)+500)
        
    Q:
        构造搜索条件
        1、传参
            models.UserInfo.objects.filter(id=123,name=‘alex‘)
        
        2、传字典
            d = {‘id‘: 123, ‘name‘:‘alex‘}
            models.UserInfo.objects.filter(**d)
            
                <input name=‘id‘ />
                <input name=‘name‘ />
                获取用户输入,并构造成字典:
                models.UserInfo.objects.filter(**c)
        3、传Q对象
            models.UserInfo.objects.filter(Q对象)
            
               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))
            
                # models.Tb1.objects.filter(q1)
               
               
                # 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((‘status‘, ‘在线‘))
                #
                # con.add(q1, ‘AND‘)
                # con.add(q2, ‘AND‘)
                #
                # models.Tb1.objects.filter(con)
        
3、model多对多操作
    - 创建
        a. 方式一:
            class B2G(models.Model):
                b_id = models.ForeignKey(‘Boy‘)
                g_id = models.ForeignKey(‘Girl‘)

class Boy(models.Model):

username = models.CharField(max_length=16)

class Girl(models.Model):

name = models.CharField(max_length=16)
        
        b. 方式二:
            class Boy(models.Model):

username = models.CharField(max_length=16)
                # girl_set
            class Girl(models.Model):

name = models.CharField(max_length=16)

b = models.ManyToManyField(‘Boy‘)

- 操作:
        添加:
            正向
                g1 = models.Girl.objects.get(id=1)
                
                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])
            
            反向
                b1 = models.Boy.objects.get(id=1)
                b1.girl_set.add(1)
                b1.girl_set.add(models.Girl.objects.all())
                
                b1.girl_set.add(*[1,2,3,4])
                ...
        删除:
            g1 = models.Girl.objects.get(id=1)
            g1.b.clear() # 清空和girl ID=1所关联的所有数据
            
            g1.b.remove(2)   
            g1.b.remove(*[1,2])
            
        查询:
            g1 = models.Girl.objects.get(id=1) # SQL
            g1.b.all()                           # SQL
            g1.b.filter().count()
            
            b1 = models.Boy.objects.get(id=1)
            b1.girl_set.all()
            
            models.Girl.objects.all().values(‘id‘,‘name‘, ‘b__username‘)
            models.Boy.objects.all().values(‘id‘,‘username‘, ‘girl__name‘)
        更新:
            
            
        
        ORM:
            python操作数据库模块:
                MySQLdb
                pymysql
            
        原生SQL
            # from django.db import connection
            # cursor = connection.cursor()
            # cursor.execute("""SELECT * from tb where name = %s""", [‘Lennon‘])
            # row = cursor.fetchone()
            
4、中间件

配置文件:
            MIDDLEWARE_CLASSES
            
        写类:
            process_request
            process_view
            process_exception
            process_response
            
            
        1.10
        配置文件:
            MIDDLEWARE =
            
        原版本:
            如果process_request中有return, 则所有的process_response执行一遍
            
    
5、缓存

6、信号

7、分页(公共插件)
    作业:页码处理

---恢复内容结束---

时间: 2024-10-11 00:01:12

day20-Django3的相关文章

Day20 javaWeb监听器和国际化

day20 JavaWeb监听器 三大组件: Servlet Listener Filter ? Listener:监听器 初次相见:AWT 二次相见:SAX ? 监听器: 它是一个接口,内容由我们来实现: 它需要注册,例如注册在按钮上! 监听器中的方法,会在特殊事件发生时被调用! ? 观察者: 事件源: 小偷 事件: 偷东西 监听器: 警察 监听器中的方法:抓捕 ? JavaWeb中的监听器 事件源:三大域! ServletContext 生命周期监听:ServletContextListen

Python之路,Day20 - 分布式监控系统开发

Python之路,Day20 - 分布式监控系统开发 本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求讨论 1.可监控常用系统服务.应用.网络设备等 2.一台主机上可监控多个不同服务.不同服务的监控间隔可不同 3.同一个服务在不同主机上的监控间隔.报警阈值可不同

day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor

Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_response[必须有] process_request process_response process_request process_response process_request process_response process_request process_response 路由->函数 3.

leetcode -day20 Add Two Numbers

1.  Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 ->

day20.模块和包

阅读目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2.3 from ... import ... 2.4 __init__.py文件 2.5  from glance.api import * 2.6 绝对导入和相对导入 2.7 单独导入包 day20.模块和包

[Java视频笔记]day20

File类 1. 用来将文件或者文件夹封装成对象 2. 方便对文件与文件夹的属性信息进行操作(流只能操作数据) 3. File对象可以作为参数传递给流的构造函数 File类常见方法: 1. 创建 boolean createNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false.和输出流不一样,输出流对象一建立就创建文件,而且文件已经存在,则覆            盖. boolean mkdir():创建文件夹 boolean mkdirs():创建多级文件夹

day20 java 语言中的读取写入数据(一)

day20  java 语言中的读取写入数据(一) 一.io概述 io数据流的读写功能,在实际的生活中也很常见,比如文件的上传.下载,日志的自动更新等都与io读写密切相关.io又被分为了读取数据和写入数据两个大的功能.下面就来看看读取数据的几种类. 二.读取数据的几种方式 读取数据被分为了字节流读取数据,和字符流读取数据两种. (一):字符输入流: 1.fileReader类.是字符流读取数据 2.BufferedReader类.带有缓冲流读取数据 (二):字节输入流: 1.FileInputS

python---补充django中文报错(2),Django3.5出错

今天是要Django3.5设置项目,结果出现中文报错,虽然之前分析过py2.7的报错原因,但是在py3之后reload不在使用,需要引入: from importlib import reload 但是这个并没有任何用,因为在py3之后默认编码不再是字节码,而是utf-8,可以使用代码查看 sys.getdefaultencoding() 这时候就出现了新的错误,出错地点 data = data.encode() AttributeError: 'bytes' object has no att

django3的变化

最近跟着Django by Example 2015学习,可老想用最新版的Django3.在学的过程中可踩了不少坑. 今天就又碰到一个: 在这本书中96页有这样的代码: url(r'^login/$', 'django.contrib.auth.views.login', name='login'), 第一个坑:url被path替代. 第二个坑:上面的第二个参数已经不能用' xxx'这样的格式.我从 django.contrib.auth中导入login,将上面的语句改为: path('logi

Django3 中遇到django.core.exceptions.ImproperlyConfigured mysqlclient 1.3.13 or newer is required; you have 0.9.3.异常的解决方案

转自:https://yuntianti.com/posts/fix-django3-mysqlclient-import-error/ Django 近期发布了3.0版本,其中首度支持了asyncio让人兴奋, 为此引入了新的网关接口协议ASGI.按异步IO的实现原理,即使使用ASGI替代WSGI部署Web应用,如果使用了一些同步库,肯定还是会阻塞IOLoop的,使应用失去异步特性.但是Django的应用场景很多是有状态的,不得不使用一些带状态的库和函数.比如在MySQL中执行事务,或一些前后