2018-11-9 17:57:09
明天开始自己独立写luffy部分表的接口,
越努力,越幸运!永远不要高估自己!
明天后天先不想下看视频,把接口做完,然后整理一下笔记,温故而习之,可以为师啊!
知识点1:
通过所给字符串,找到相应的类,并调用已知类里面的方法
Django的中间件,rest——framework也都是用的该方法
贴上笔记
s9day108 内容回顾: 1. Http协议? Http协议就是一个传输数据格式。 我原来学习django框架,从socket服务端开始学起。 自己创造了一个socket服务器来充当:网站。 浏览器当socket客户端。 更清楚的明白到底http协议是什么? - 请求头 请求头 - 响应头 响应头 一次请求响应后,断开连接。 2. 常见请求头 3. 常见的请求体? Form表单提交: POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&... Ajax请求: POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&... POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\n{“username”:"alex","password":123} 补充:django中获取请求体 - request.POST - request.body 4. django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask、Django) - 中间件,帮助我们对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session - 路由匹配 - 视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染 - 中间件,对响应的数据进行处理。 - wsgi,将响应的内容发送给浏览器。 5. 中间件 - 5个方法 - 应用场景: - 登录认证,不再需要在每个函数中添加装饰器 - 权限,当用户登录时候获取当前用户所有权限并放入session,然后再次访问其他页面,获取当前url并在session中进行匹配。如果没有匹配成功,则在中间件返回“无权访问” - 跨域, - jsonp,动态创建一个script标签。 - cors,设置响应头 应用:本地开始前后端分离的时使用。 6. ORM操作 - only - defer - seleted_related - prefetch_related 示例: class Depart(models.Model): 5个部门 title = models.CharField(...) class User(models.Model): 10个用户 name = models.CharField(...) email = models.CharField(...) dp = models.FK(Depart) 1.以前的你:11次单表查询 result = User.objects.all() for item in result: print(item.name,item.dp.title) 2. seleted_related,主动做连表查询(1次链表) result = User.objects.all().seleted_related(‘dp‘) for item in result: print(item.name,item.dp.title) 问题:如果链表多,性能越来越差。 3. prefetch_related:2次单表查询 # select * from user ; # 通过python代码获取:dp_id = [1,2] # select * from depart where id in dp_id result = User.objects.all().prefetch_related(‘dp‘) for item in result: print(item.name,item.dp.title) 赠送: 数据量比较大,不会使用FK,允许出现数据冗余。 7. django rest framework的作用? 快速搭建基于restful规范的接口。 8. 你理解的 restful 规范? restful是一个规范,规定API如何编写,通过他可以让我们api更加简洁可维护。 如,最直观的: method: - get - post - put - delete 原来都是url中设置的。 除此之外: - api - 版本 - 名词 - 条件 - 状态码 - 返回值 - 错误信息 - hypermedia link 9. django rest framework组件: # 就说自己前段时间看过源码 restframework部分多看源码 - 访问频率控制原理: 匿名: 1.1.1.1:[时间,时间,时间,时间,] 登录: user:[时间,时间,时间,时间,] 默认将访问记录放在缓存中:redis/memcached - 序列化 from rest_framework.serializers import Serializer class XX(Serializer): pass ser =XX(queryset,many=True) # ListSerializer对象 源码中使用啦new方法 真正的构造方法 init也算是构造方法 ser =XX(obj, many=False) # XX对象 - 列表生成式 - 根据字符串的形式,自动导入模块并使用反射找到模块中的类【参考:s9day108】。 今日内容: 1. 深科技表结构 2. git 内容详细: 1. 深科技表结构(6表) # ######################## 深科技相关 ######################## class ArticleSource(models.Model): """文章来源""" name = models.CharField(max_length=64, unique=True) class Meta: verbose_name_plural = "16. 文章来源" def __str__(self): return self.name class Article(models.Model): """文章资讯""" title = models.CharField(max_length=255, unique=True, db_index=True, verbose_name="标题") source = models.ForeignKey("ArticleSource", verbose_name="来源") article_type_choices = ((0, ‘资讯‘), (1, ‘视频‘)) article_type = models.SmallIntegerField(choices=article_type_choices, default=0) brief = models.TextField(max_length=512, verbose_name="摘要") head_img = models.CharField(max_length=255) content = models.TextField(verbose_name="文章正文") pub_date = models.DateTimeField(verbose_name="上架日期") offline_date = models.DateTimeField(verbose_name="下架日期") status_choices = ((0, ‘在线‘), (1, ‘下线‘)) status = models.SmallIntegerField(choices=status_choices, default=0, verbose_name="状态") order = models.SmallIntegerField(default=0, verbose_name="权重", help_text="文章想置顶,可以把数字调大,不要超过1000") vid = models.CharField(max_length=128, verbose_name="视频VID", help_text="文章类型是视频, 则需要添加视频VID", blank=True, null=True) comment_num = models.SmallIntegerField(default=0, verbose_name="评论数") agree_num = models.SmallIntegerField(default=0, verbose_name="点赞数") view_num = models.SmallIntegerField(default=0, verbose_name="观看数") collect_num = models.SmallIntegerField(default=0, verbose_name="收藏数") # tags = models.ManyToManyField("Tags", blank=True, verbose_name="标签") date = models.DateTimeField(auto_now_add=True, verbose_name="创建日期") position_choices = ((0, ‘信息流‘), (1, ‘banner大图‘), (2, ‘banner小图‘)) position = models.SmallIntegerField(choices=position_choices, default=0, verbose_name="位置") #comment = GenericRelation("Comment") class Meta: verbose_name_plural = "17. 文章" def __str__(self): return "%s-%s" % (self.source, self.title) class Collection(models.Model): """收藏""" content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = GenericForeignKey(‘content_type‘, ‘object_id‘) account = models.ForeignKey("Account") date = models.DateTimeField(auto_now_add=True) class Meta: unique_together = (‘content_type‘, ‘object_id‘, ‘account‘) verbose_name_plural = "18. 通用收藏表" class Comment(models.Model): """通用的评论表""" content_type = models.ForeignKey(ContentType, blank=True, null=True, verbose_name="类型") object_id = models.PositiveIntegerField(blank=True, null=True) content_object = GenericForeignKey(‘content_type‘, ‘object_id‘) p_node = models.ForeignKey("self", blank=True, null=True, verbose_name="父级评论") content = models.TextField(max_length=1024) account = models.ForeignKey("Account", verbose_name="会员名") disagree_number = models.IntegerField(default=0, verbose_name="踩") agree_number = models.IntegerField(default=0, verbose_name="赞同数") date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.content class Meta: verbose_name_plural = "19. 通用评论表" class Account(models.Model): username = models.CharField("用户名", max_length=64, unique=True) password = models.CharField("密码", max_length=64) class UserAuthToken(models.Model): """ 用户Token表 """ user = models.OneToOneField(to="Account") token = models.CharField(max_length=64, unique=True) 2. git git是一个用于帮助用户实现版本控制的软件。 命令: git init git status 查看当前文件夹的状态。 git add 文件名 对指定文件进行版本控制 git add . 对指定文件夹下的所有文件及子目录进行版本控制 git commit -m ‘详细的描述信息‘ 创建提交记录(版本) git log git reflog git reset --hard 提交记录(版本号) 作业: 课程系列: - 课程列表 - 课程详细 深科技相关 - 文章列表 - 文章详细 - 文章评论 - 点赞 - 收藏
原文:https://www.cnblogs.com/zhen1996/p/9936687.html