• python全栈开发day67--字段类型、字段属性、ORM回顾


    一、回顾总结

    https://www.cnblogs.com/maple-shaw/articles/9323320.html

    1. 视图
            1. CBV 和 FBV
                from django.views import View
                
                class AddPublisher(View):
                    
                    def dispatch(self, request, *args, **kwargs):
        
                        ret = super().dispatch(request, *args, **kwargs)
    
                        return ret
                        
                    def get(self,request):
                        pass
                        
                    def post(self,request):
                        pass
                使用:
                    url(r'^add_publisher/', views.AddPublisher.as_view()),        
                        
            2. CBV的简单的流程
                1. AddPublisher.as_view()得到一个view函数
                    url(r'^add_publisher/', view),
                2. 请求到来的时候 执行view:
                    1. 实例化AddPublisher的类,赋值给self
                    2. 执行dispatch方法 
                    3. 通过反射获取到get或者post的方法
                    4. 执行get或者post方法,返回HttpResponse对象
            3. 装饰器的使用
                1. FBV 正常使用  
                    @装饰器
                    
                2. CBV 
                    from django.utils.decorators import method_decorator
                    
                    1. 给get或者post方法加
                    2. 给dispatch方法加
                    3. 给类加(写name='get'4. request
                request.method        请求方法 GET POST
                request.GET            URL传参  {}
                request.POST        form表单传的参数
                request.body        请求体
                request.FILES       上传的文件
                request.path_info   URL路径   不包含域名和URL参数
                
                request.get_full_path()   URL路径包含URL参数
                request.get_host()      获取IP和端口
            5. response
            
                1. HttpResponse('字符串')    —》 页面看到的就是字符串  content—type: text/html;charset=utf8
                2. render(request,'HTML文件名',{参数})        ——》返回一个页面
                3. redirect('/index/')        跳转 重定向  返回一个响应头  Location:'/index/'
                4. JsonResponse(字典)    content—type: application/json 
                    返回列表时     safe=False
                    JsonResponse(data,safe=False)
            
        2. 路由
            1.
                from django.conf.urls import url
                
                urlpatterns =[
                    url(正则表达式,视图,参数,name)
                    url(正则表达式,视图,参数,name)
                    url(正则表达式,视图,参数,name)
                ]
            2. 正则表达式
                加$  
                [0-9]  /d
                + 一个或多个
                ?0个或1个
                * 0个或多个
                . 除了换行符的所有
                
            3. 分组和命名分组
                
                url(r'book/[0-9]{4}/[0-9]{2}/',views.book)
                
                无名分组:
                    url(r'book/([0-9]{4})/([0-9]{2})/',views.book)
                    按照位置传参的方式传给视图
                    
                
                命名分组
                    url(r'book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.book)
                    按照关键字传参的方式给视图
                    
                捕获到的参数都是字符串
                
            4. 命名url和url的反向解析
                
                url(r'home',view,home,name='home')
                url(r'book/([0-9]{4})/([0-9]{2})/',views.book,name='book')
                url(r'book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.book,name='book2')
                
                
                视图中反向解析URL:
                    from django.shortcuts import reverse
                    
                    reverse('home')    ——》 /home/
                    reverse('book',args=('1999','08'))        ——》/book/1999/08/
                    reverse('book2',kwargs={'year':'1998','month':'08'})  ——》 /book/1998/08/
                    
                    
                模板中反向解析URL:
                    {% url 'home' %}  ——》 /home/
                    无名分组:
                    
                        {% url 'book' '1999' '08' %}  ——》/book/1999/08/
                    
                    有名分组:
                        {% url 'book' '1999' '08' %}  ——》/book/1999/08/
                        {% url 'book' year='1999' month='08' %}  ——》/book/1999/08/
                        {% url 'book' month='08' year='1999' %}  ——》/book/1999/08/
                    
            5. include 
                from app01 import urls as app01_urls
                from app02 import urls as app02_urls
            
                url('app01/', include(app01_urls)),
                url('app02/', include(app02_urls))
                
                
                
                url('app01/', include('app01.urls')),
                url('app02/', include('app02.urls'))
                
            5. namespace
                
                
        3. ORM
            1. mysql的配置
                1. 创建mysql数据库
                2. settings配置
                    ENGINE:    'mysql'
                    NAME: '数据库名称'
                    HOST:IP
                    PORT: 3306
                    USER: 'root'
                    PASSWORD: ''
                    
                3. 告诉django使用pymysql来连接mysql数据库
                    在项目同名的文件夹下的__init__.py中写:
                        import pymysql
                        pymysql.install_as_MySQLdb()
                        
                4. 创建model
                    class Person(models.Model)
                        name = models.CharField(max_length=32)
                        
                5. 执行两条数据库命令
                    python manage.py makemigrations   # 记录models的变更记录
                    python manage.py migrate         # 把变革记录更新到数据库中
                    
            2. ORM操作
            
                1. 查
                    models.Person.objects.all()  # 查所有
                    models.Person.objects.get(id=1,name='xxx')    # 查一个对象 满足条件的
                    models.Person.objects.filter(id=1,name='xxx')  # 查询满足条件的所有对象 列表
                    models.Person.objects.filter(id=1,name='xxx').order_by('id')  
                    
                    属性:
                        pub_obj.name
                        
                        外键的 book
                        book_obj.name
                        book_obj.publisher   ——》 这是书籍关联的出版社对象 
                        book_obj.publisher_id   ——》 这是数据库存的数据
                        book_obj.publisher.id   
                        book_obj.publisher.name 
    
                        多对多 author
                        
                        author.name
                        
                        author.books    ——》 多对多的管理对象
                        author.books.all()   所有作者关联的书籍对象列表 
                        
                2. 增加:
                    models.Publisher.objects.creatte(name='xxxx')
                    
                    外键
                    models.Book.objects.creatte(name='xxxx',publisher=pub_obj)
                    models.Book.objects.creatte(name='xxxx',publisher_id=pub_obj.id)
                    
                    多对多
                    
                    author_obj = models.Author.objects.creatte(name='xxx')
                    author_obj.books.set([1,2,3])
                    
                3. 删除
                    models.Publisher.objects.get(id=1).delete()
                    models.Publisher.objects.filter(id=1).delete
                    
                4. 修改
                    
                    pub_obj.name = new_name
                    pub_obj.save()
                    
                    book_obj.name= new_name
                    book_obj.publisher = new_pub_obj
                    book_obj.publisher_id = 2
                    book_obj.save()
                    
                    author_obj.name=new_name
                    author_obj.save()
                    author_obj.books.set([1,2])
    回顾总结

    二、预习和拓展

    1.上台阶问题

         

        

    def  f(n):
        if  n ==1:
            return 1
        elif n==2:
            return 2
        elif n ==3:
            return 4
        return f(n-1) + f(n-2) + f(n-3)
    上台阶代码实现

    2. 自定义固定长度char字段

     

    class MyCharField(models.Field):
        def __init__(self,max_length,*args,**kwargs):
            self.max_length = max_length
            super(MyCharField,self).__init__(max_length,*args,**kwargs)
        
        def db_type(self,connection):
             return "char(%s)" % self.max_length
    MyCharField

      cname = MyCharField(max_length=25)

    2.ORM查!

  • 相关阅读:
    Python函数语法里的中括号和逗号是什么意思
    关于mysql配置文件中jdbc url 的记录
    MySQL 优化慢查询
    Windows10 解决端口占用问题
    数据结构与算法分析-表,栈,队列
    MySQL手动执行rollback,内部实现分析
    Docker 之 RabbitMQ安装教程 基于腾讯云
    Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
    List按需转换Map
    位移运算符 1<<4
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9407177.html
Copyright © 2020-2023  润新知