form 组件

1. form组件梳理
    
    注册功能:
        1. 利用form组件生成HTML代码
        2. 使用AJAX提交数据,并且在页面显示错误信息
        3. 后端还是使用form做校验

    额外补充:
        滑动验证码
        前端预览头像
        

2. 站点主页
    - Django admin简单使用
        1. 告诉admin 我有哪一些表
            1. 在app/admin.py文件中,把表注册一下
        2. 只有超级用户才能登陆admin管理后台
        
        3. blank=True 控制django admin 可以不填
        
        
        auth模块再讲解
            详见今天auth_demo示例代码
        
    - Bootstrap布局
        - 2 8 2布局
        
        - media的配置
            
        
    - ORM查询操作
        - 基于对象的查询
        - 基于QuerySet的查询
        
        当查询比写入操作多的时候,我们尽量减少跨表查询,节省时间。
        文章表的评论数据和点赞踩灭数据 是通过额外字段写在文章表里的
1. 分组和聚合  https://www.cnblogs.com/liwenzhou/p/8660826.html

    1. 分组
        ORM中values或者values_list 里面写什么字段,就相当于select 什么字段
        
        ret = models.Employee.objects.all().values("dept", "age")
        相当于:
        SELECT `employee`.`dept`, `employee`.`age` FROM `employee` LIMIT 21; args=()
        
    2. ORM中 annotate 前面是什么就按照什么分组!
        from django.db.models import Avg
        ret = models.Employee.objects.values("province").annotate(a=Avg("salary")).values("province", "a")
        相当于:
        SELECT `employee`.`province`, AVG(`employee`.`salary`) AS `a` FROM `employee` GROUP BY `employee`.`province` ORDER BY NULL LIMIT 21; args=()

    3. extra  --> 在执行ORM查询的时候执行额外的SQL语句
        # 查询person表,判断每个人的工资是否大于2000
        ret = models.Person.objects.all().extra(
            select={"gt": "salary > 2000"}
        )
        相当于:
        SELECT (salary > 2000) AS `gt`, `person`.`id`, `person`.`name`, `person`.`salary`, `person`.`dept_id` FROM `person` LIMIT 21; args=()


    4. 直接执行原生的SQL语句,类似pymysql的用法
        from django.db import connection
        cursor = connection.cursor()  # 获取光标,等待执行SQL语句
        cursor.execute("""SELECT * from person where id = %s""", [1])
        row = cursor.fetchone()
        print(row)
        


2. 个人站点首页
    - 分组和聚合查询
        1. 文章分类
        2. 标签分类
    
        3. 日期归档
            1. MySQL内置的方法:date_format(字段名, "%Y-%m")  
            2. extra() --> 执行额外的原生SQL语句
                ret = models.Article.objects.filter(user=user).extra(
                    select={"archive_ym": "date_format(create_time,'%%Y-%%m')"}
                ).values("archive_ym").annotate(c=Count("nid")).values("archive_ym", "c")
sql:

    子查询
    join查询
    分组查询(单表分组,多表分组)

ORM:
    跨表查询
    翻译sql    
    Queryset.annotate() # 
    Publish.objects.all().annotate()


博客系统

个人站点(ORM查询------跨表查询与分组查询)
    ---
文章详细页

1 一次请求的完整流程

    ----response
    ----伴随着其他请求
    
    
2 render()到底渲染的什么?
     
    作业1 一旦js文件变为静态文件,点赞的js代码如何重构
      
3 json
    
4 点赞    
   作业2: 点赞流程
   
博客(2)  ******  

Xadmin(4)******
crm(3)   ******

restframework  (3) ******
vue(3) ******
路飞(5)******




(1 月)
flask
爬虫
linux
.....


点赞

点赞或者评论者就是当前登录人

1 绑定事件
2 携带data={article_id,is_up}发送Ajax请求
3 对应的视图函数要生成一个赞或者灭记录
4 响应结果给ajax
5 Ajax的success处理


知识点:

什么是json?

    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              |objects'{"":""}'|
    +-------------------+---------------+
    | list, tuple       | array[]        |
    +-------------------+---------------+
    | str               | string  '""'   |
    +-------------------+---------------+
    | int, float        | 'number'        |
    +-------------------+---------------+
    | True              | 'true '         |
    +-------------------+---------------+
    | False             | 'false'         |
    +-------------------+---------------+
    | None              | 'null'          |
    +-------------------+---------------+







user  article_id   is_up
 1       1          True
 1       1          False
原文地址:https://www.cnblogs.com/shangchunhong/p/9391893.html