ContentType&CORS&Git

本文介绍了Django框架中ContentType组件的应用,展示了如何利用ContentType解决多表关联问题,并深入探讨了跨域资源共享(CORS)的工作原理及实现方法。

ContentType

django内置的ContentType组件就是帮我们做连表操作
如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation


class DegreeCourse(models.Model):
    name = models.CharField(max_length=32)


class Course(models.Model):
    name = models.CharField(max_length=32)

    # 数据库不生成,只用于链表查询
    policy_list = GenericRelation("PricePolicy")


class PricePolicy(models.Model):
    period = models.CharField(max_length=32)
    price = models.FloatField()
    # 课程类型 关联django自动生成的contenttype表
    content_type = models.ForeignKey(ContentType)  
    object_id = models.PositiveIntegerField()
    # 不在数据库中生成,只用于帮助你做数据操作
    content_object = GenericForeignKey('content_type', 'object_id')

CORS

即:跨域资源共享(CORS,Cross-Origin Resource Sharing),其本质是设置响应头,使得浏览器允许跨域请求
复杂请求在发送真正的请求前,会先发送一个OPTIONS请求,第三方服务端先”预检“一下,”预检“通过才会发送正式数据。

  • “预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method
  • “预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-Headers
  • “预检”缓存时间,服务器设置响应头:Access-Control-Max-Age
带请求头的复杂请求

客户端cors.html

<body>
    <h3>CORS示例</h3>
    <button type="button" onclick="getData()" >获取第三方数据</button>
 
    <script src="/static/jquery-3.2.1.js"></script>
    <script>
    function getData() {
        $.ajax({
            url:'http://127.0.0.1:8000/cors_data/',
            type:'GET',   // 请求方式:HEAD、GET、POST为简单请求
            headers:{'name':'joe1991'},   //有请求头的复杂请求
            success:function (arg) {
                var $tag = $('<h6>');
                $tag.text(arg);
                $('h3').append($tag);
                }
            })
        }
    </script>   
</body>

第三方服务端views.py

def cors_data(request):
    if request.method == 'OPTIONS':
        # 预检
        obj = HttpResponse()
        obj['Access-Control-Allow-Origin'] = " http://127.0.0.1:8001"
        obj['Access-Control-Allow-Headers'] = 'name'    #处理方式不同
        # obj['Access-Control-Allow-Methods'] = "PUT"
        return obj
    else :
        obj = HttpResponse('第三方数据')
        obj['Access-Control-Allow-Origin'] = " http://127.0.0.1:8001"
        return obj

区别

JSONP:主要修改在前端部分,后端需做约束修改,发jsonp请求
JSONP:只能发GET请求
CORS:前端的代码不用修改,服务端的代码需要修改
CORS:可以发任意请求,简单请求与复杂请求处理方式不同

Git

1236395-20180412210326584-396073542.png

工作区:当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看

版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行【git commit -m '又一个版本'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录

某个文件夹中的内容进行版本管理:
进入文件夹,右键git bash
git init 初始化,当前所在的文件夹可以被管理且以后版本相关的数据都会存储到.git文件中
git status 查看当前文件夹以及子目录中文件是否发生变化:内容修改/新增文件/删除,已经变化的文件会变成红色,已经add的文件会变成绿色
git add .  给发生变化的文件(贴上一个标签)或 将发生变化的文件放到某个地方,只写一个句点符就代表把git status中红色的文件全部打上标签
git commit -m '新增用户登录认证功能以及xxx功能' 将“绿色”文件添加到版本中
git log 查看所有版本提交记录,可以获取版本号
git reset --hard 版本号   将最新的版本回退到更早的版本
git reflog   回退到之前版本后悔了,再更新到最新或者最新之前的版本
git reset --hard 版本 回退    

BUG修复

1.stash

stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list        查看“某个地方”存储的所有记录
git stash clear     清空“某个地方”
git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
git stash drop      编号,删除指定编号的记录
2.branch

branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

git branch 分支名称             创建分支
git checkout 分支名称          切换分支
git branch -m 分支名称        创建并切换到指定分支
git branch                          查看所有分支
git branch -d 分支名称         删除分支
git merge 分支名称              将指定分支合并到当前分支

远程管理

git pull origin maste 
git push origin maste 

协同开发

先 git pull origin master 然后 git push origin master
先 git fetch origin master 然后 git merge origin/master 再 git push origin master
先 git fetch origin master 然后 git rebase origin/master 再 git push origin master

参考链接:
123

转载于:https://www.cnblogs.com/iyouyue/p/8810464.html

使用 `fetch` 发起 GET 请求一直触发 `'Network response was not ok'` 错误,多次触发时 C HTTPD 返回 503 BUSY,可能是由多种原因导致,不一定是后端 C 语言响应数据问题。 ### 触发 `'Network response was not ok'` 错误的原因 - **网络问题**:客户端与服务器之间的网络连接不稳定、中断或者存在丢包现象,会使请求无法正常到达服务器或者服务器响应无法正常返回客户端,从而触发该错误。 - **服务器问题**:服务器可能由于过载、维护或者出现故障,无法正常处理请求,返回非 200 状态码,导致 `fetch` 认为响应不正常。 - **请求 URL 错误**:请求的 URL 可能拼写错误、不存在或者指向了一个错误的资源,服务器无法找到对应的资源而返回错误响应。 - **跨域问题**:如果请求涉及跨域访问,而服务器没有正确配置 CORS(跨域资源共享)策略,浏览器会阻止该请求,导致响应失败。 ### C HTTPD 返回 503 BUSY 的原因 - **服务器过载**:服务器可能同时处理过多的请求,资源耗尽,无法及时处理新的请求,从而返回 503 状态码表示服务不可用。 - **服务器配置问题**:服务器的配置可能存在问题,例如最大连接数设置过小,当请求数量超过该限制时,服务器会拒绝新的请求并返回 503。 - **后端程序问题**:后端 C 语言程序可能存在性能问题,例如内存泄漏、死锁等,导致程序运行缓慢或者崩溃,无法正常响应请求。 ### 关于是否是后端 C 语言响应数据问题 后端 C 语言响应数据问题可能是原因之一,但不是唯一的原因。如果响应数据格式错误、包含非法字符或者不符合客户端的预期,可能会导致客户端解析失败,触发 `'Network response was not ok'` 错误。但在确定是响应数据问题之前,需要先排除上述其他可能的原因。 ### 示例代码分析 以下是一个使用 `fetch` 发起 GET 请求的示例代码: ```javascript const url = 'https://example.com/api/data'; fetch(url) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { console.log(data); }) .catch(error => { console.error('Fetch error:', error); }); ``` 在这个示例中,如果请求失败,会抛出 `'Network response was not ok'` 错误。可以通过查看 `response.status` 和 `response.statusText` 来获取具体的错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值