zoukankan      html  css  js  c++  java
  • 上周回顾

    数据库同步

        avatar = models.FileField(upload_to='avatar/',default='avatar/default.png')
        
        
        is_up = models.BooleanField()  # 传True/False    自动存成0/1
        
    
        content = models.TextField()  # 大段html内容
    
    
        # 数据库优化字段(******)
        comment_num = models.BigIntegerField(default=0)
        up_num = models.BigIntegerField(default=0)
        down_num = models.BigIntegerField(default=0)
    
        
        parent = models.ForeignKey(to='self',null=True)  # 自关联
        
        
        
    1.注册功能
        1.注册功能往往都会由很多校验性的需求  所以这里我们用到了forms组件
            项目中可能有多个地方需要用到不同的forms组件 为了解耦合 但是创建一个py文件 专门用来存放项目用到的所有的forms组件
            校验 用户名 密码 确认密码 邮箱
            借助于钩子函数 校验用户名是否存在  密码与确认密码是否一致
        2.创建路由 写视图函数
            将实例化产生的forms类对象 利用模板语法传递到前端页面
            再利用forms组件自动渲染前端获取用户输入的标签
        3.用户输入数据后  采用ajax的方式朝后台提交数据
            1.考虑到获取用户输入的input框可能会有很多 在同ajax获取的时候 可能会比较繁琐
                借助了form标签有一个方法 自动将内部所有的普通键值 打包成一个容器类型
                $('#myform').serializeArray()
            2.你需要提交的数据不单单只有普通键值 还有文件 可以借助 内置对象 FormData
                如何获取文件对象
                $('#myfile')[0].files[0]  # forms组件渲染错误的信息      
        
        4.用户头像前端动态展示
            利用内置对象 文件阅读器   new FileReader
            等待什么什么加载完毕再执行  onload
            window.onload
            fileReader.onload = function(){
                文件阅读器加载完毕之后 再执行的操作
            }
        
        5.针对ajax提交的数据 后端在返回信息的时候  通常都是一个字典
            在创建数据的时候利用**直接打散字典的形式 传输数据
            
        6.将错误的信息传递给前端
            前端渲染错误信息的时候 遇到了一个问题  如何将对应的信息渲染到对应的input框下面的span标签中
            研究forms组件渲染的input框的id值的特点  id_字段名
            发现后端传过来的字典的key就是一个个的字段名  自己拼接处id值
    
    
    
    2.登录功能
        1.前端页面搭建
            图片验证码
        2.图片验证码 
            img标签 src可以接收的数据
                1.图片的具体路径
                2.图片的二进制数据
                3.后端url(自动朝该url发送get请求)
            
        3.后端代码推导
            操作图片的模块pillow
    
        4.完成后跳转到网站首页
            展示网站所有的博客内容
    

    django
    django是什么
    web框架 django是一款专门用来开发app的web框架
    框架 就是类似于提前帮你搭建好整个项目的基础架构

    纯手撸的web框架
        统一接口
        先砸钱 先让用户对你这个软件产生依赖  然后你再慢慢的抽血
        共享单车       
        
        HTTP协议       >>>      sql语句
        为什么要有HTTP协议  一个服务端要服务N多个不同的客户端 如何保证数据的正常交互
        为什么要有sql语句   一个服务端要服务N多个不同的客户端 如何保证数据的正常交互
    
    
    团队创业
    

    web框架
    django
    flask
    三行代码
    tronado
    自己去百度收一收

    django版本问题
    django == 1.11.11

    requiretment.txt
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
        django == 1.11.11
    

    django基本操作命令
    创建一个django项目
    django-admin startproject 项目名
    启动django项目
    python manage.py runserver
    创建应用(app01/app02) web option
    python manage.py startapp 应用名
    数据库迁移命令
    python manage.py makemigrations
    python manage.py migrate
    # 报错 中文的问题
    # 报错 django源码多了一个逗号

    浏览器 >>> nignx + web服务网关接口(wsgiref,uwsgi) >>> 中间件(全局性的功能) >>> 路由层 >>> 视图层 >>> 模板层 + 模型层(ORM查询) + 数据库

    web服务网关接口
    django默认的是wsgiref
    上线之后该用uwsgi
    WSGI与wsgiref,uwsgif关系
    前者是协议 后者是实现该协议的功能模块

    请求到达django后端和响应离开django后端都必须结果中间件
    django默认有七个中间件 并且支持用户自定义中间件
    自定义中间件有五个可以自定义的方法
    需要掌握
    process_request
    process_response
    需要了解
    process_view
    process_exception
    process_template_response
    # 形参中有response的 一定要将该形参返回
    # 写好的中间件 一定要在配置文件中注册

    设计思想
    importlib
    反射
    # 都是操作字符串

    路由层
    url(r'^index/',view.index)

    1.路由匹配
        url的第一个参数  是一个正则表达式
        在匹配的时候 有一个特点 一旦匹配上了 会立刻停止匹配  执行路由对应的方法
    
    2.无名分组(位置参数)
        url(r'^index/(d+)',view.index)
    
    3.有名分组(关键字参数)
        url(r'^index/(?P<year>d+)',view.index)
    
    4.反向解析
        静态文件的配置
        url(r'^index/',view.index,name='index')  # 这个名字一定要是在整个django项目中唯一
        {% url 'index' %}
        reverse('index')
        
        url(r'^index/(d+)',view.index)
        {% url 'index' 1 %}
        reverse('index',args=(1,))  # 容器类型 哪怕只有一个元素  你也习惯性的加一个逗号
        
        url(r'^index/(?P<year>d+)',view.index)
        {% url 'index' 1 %}
        {% url 'index' year=1 %}
        reverse('index',args=(1,))  # 容器类型 哪怕只有一个元素  你也习惯性的加一个逗号
        reverse('index',kwargs={'year':1,})  # 容器类型 哪怕只有一个元素  你也习惯性的加一个逗号
    
    5.路由分发(******)
        include
        
        url(r'^应用名1/',include('应用名1.urls'))
        url(r'^应用名2/',include('应用名2.urls'))
        
    6.名称空间
        url(r'^应用名1/',include('应用名1.urls',namespace='应用名1'))
        url(r'^应用名2/',include('应用名2.urls',namespace='应用名2')))
        
        reverse('应用名1:别名')
        reverse('应用名2:别名')
    

    视图层
    HttpResponse

    render
    
    redirect
    
    JsonResponse
    
    FBV与CBV
        只要是视图函数 一般情况下都需要定义一个形参request
        
        CBV的书写及内部原理
        from django.views import View
        
        class MyReg(View):
            def get(self,request):
                pass
               
               
            def post(self,request):
                pass
                
        url(r'^index/',MyReg.as_view())
        # url(r'^index/',view)
        
        
        view里面      
            1.实例化产生自己写的类的对象
            2.对象点dispatch方法
        dispatch里面
            1.先确认请求方式(默认八个)
            2.反射获取方法的内存地址
            3.加括号执行对应的方法
    

    模型层
    模板语法
    变量相关 {{}}
    逻辑相关 {%%}

    1.过滤器
        |length
        |default
        |add
        |date
        |filesizeformat
        |slice
        |truncatewords
        |truncatechars
        |safe
    
    2.标签
        {% if aaa %}
        {% elif %}
        {% else %}
        {% endif %}
        
        
        {% for %}
            {{ forloop }}
        {% endfor %}
        
        {% with %}
        {% endwith %}
    
    3.自定义过滤器及标签
        1.在应用中要键一个名字必须叫templatetags
        2.任意名称的py文件
        3.固定写两行代码
            from django.template import Library
            
            register = Library()
            
            @register.filter
            
            
            @register.simple_tag
            
            
    4.模板的继承与导入
        继承
            模板中需要提前划定号区域
            {% block '名字' %}
                模板内容
            {% endblock %}
            子板中使用
            {% extends '模板的名字'%}
            {% block '名字' %}
                子板内容
                   {{ super.block }}
                   {{ super.block }}
                   {{ super.block }}
            {% endblock %}
       
            
        模板的导入
            {% include '模板名' %}  # 类似于导入模块
    

    模型层
    查询语句

    单表的查询
        类名.objects.
        必知必会13条
            all()
            filter()
            get()
            values()
            values_list()
            first()
            last()
            order_by()
            reverse()
            count()
            exists()
            distinct()
            exclude()
        神奇的双下划线
            price__lt
            __gt
            __lte
            __gte
            __in
            __range
            title__startswith
            __endswith
            __contains
            __icontains(******)
            create_time__year
            __month
    外键字段的增删改查
        一对多
        create(publish=publish_obj)
        create(publish_id=1)
        # 默认是级联更新 级联删除
        
        多对多
        add()
            add(1)
            add(1,2)
            add(author_obj)
            add(author_obj,author_obj1)
        remove()
            # 同理
        set()
            set([1,])
            set([1,2])
            set([author_obj,])
            set([author_obj,author_obj1])
            
        clear()
        
        
        
    跨表查询
        正向查询按字段
        反向查询按表名小写
        
    
    
        基于对象的(子查询)
            1.先获取一个对象
            2.利用对象点点
            book_obj.publish.name
            book_obj.authors.all()
            author_obj.author_detail.phone
            
            publish_obj.book_set.all()
            author_obj.book_set.all()
            author_detail_obj.author.name
        
        基于双下滑线(连表查询)
            models.Book.objects.filter(pk=1).values('publish__name')
            models.Book.objects.filter(pk=1).values('authors__name')
            models.Book.objects.filter(pk=1).values('authors__author_detail__phone')
                
            models.Publish.objects.filter(book__pk=1).values('name')
        
    聚合查询
        关键字   aggregate
        from django.db.models import Avg, Max, Min, Sum, Count
    
    分组查询
        关键字   annotate
        参考博客练习题
        
    F与Q查询
        F  能够获取表中的某个字段对应的数据
            库存数大于卖出数的书
            
        Q  能够改变查询条件
            与  filter(**kwargs)
            或  filter(Q(xxx='yyy')|Q(yyy='ooo'))
            非  filter(~Q(xxx='ooo'))
        ps:
            q = Q()
            q.connector = 'or'
            q.children.append('xxx','ooo')
            q.children.append('yyy','zzz')
            filter(q)
    
    
    只要你肯砸时间  什么技术你都能学会!!!
    

    django与ajax
    前后端传输数据的编码格式
    urlencoded
    username=jason&age=18
    formdata

        application/json
            {"username":"jason"}
           
    form表单
    
    
    ajax(******)
    ajax基本语法
        $.ajax({
            url:'',
            type:'post',
            data:{'name':'jason'}
            success:function(data){
                alert(data)
            }
        })
    ajax提交json格式
        data必须是json格式的数据
        contentType需要指定成application/json
    ajax提交文件格式
        data直接写formdata对象
        还需要指定两个参数为flase
        contentType
        processData
    
        
    cookie与session
    
    
    
    
    中间件
    
    
    class User:
        username 
        password
        
    1    jason       123 
    2    egon        123
    3    tank        123
    4    oscar       123
    
    class Permission:
        title
        url
    1        查看用户           check_user/
    2        增加用户           add_user/
    3        编辑用户           edit_user/(d+)/
    4        删除用户           delete_user/(d+)/
    ...
    
    class User2Permission
        user
        permission
    1           1               1
    2           1               2
    3           1               3
    
        
    
    RBAC  基于角色的权限管理()
    
        class User:
            username
            password
            
            1    jason       123 
            2    egon        123
            3    tank        123
            4    oscar       123
        
        class Role:
            title 
            1           保安队长
            2           保洁阿姨
            3           CEO
            4           管理员
            
            
        
        
        class Permission:
            title
            url
            1        查看用户           check_user/
            2        增加用户           add_user/
            3        编辑用户           edit_user/(d+)/
            4        删除用户           delete_user/(d+)/
            ...
                    
        
        class User2Role
            user
            role
            1               1           3
            2               2           2
            3               3           1
            4               4           2   
            
            
        class Role2Permission
            role
            permission
            1               3           1
            2               3           2
            3               3           3
            4               3           4
            
            
    
    白名单
    
    
    黑名单
  • 相关阅读:
    Django-用户认证组件
    Django-session组件
    Axer-使用Msfvenom自动创建有效负载的工具
    CVE-2020-0668-Windows服务跟踪中的普通特权升级错误
    隐藏Web Shell
    404 not found Webshell
    渗透测试流程
    IIS inprocess
    分布式.Net
    WPF UnhandledException
  • 原文地址:https://www.cnblogs.com/aden668/p/11799519.html
Copyright © 2011-2022 走看看