建新项目

配置settings

  • ALLOWED_HOSTS = ['*']
  • 添加创建的APP
  • 数据库:

    • ENGINE
    • NAME(数据库名):记得提前创建数据库
    • USER
    • PASSWORD
    • HOST
    • PORT
  • 语言:LANGUAGE_CODE = 'zh-Hans'
  • 时间:TIME_ZONE = 'Asia/Shanghai'
  • 时区:USE_TZ = False
  • 静态文件夹路径:
STATIC_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

伪装数据库驱动


pycharm连接数据库


迁移数据


url注册

path('app/', include(('App.urls', 'App'), namespace='app')),

include中有两个参数,一个是子路由,另一个是app名字,不填app名字,用反向解析的时候会报错

Response

客户端传送数据给服务端,使用request主动发送数据
而后客户端被动响应发送数据称为response

HttpResponse由程序猿自己创建

Response返回方式

  1. 不使用模板,直接HttpResponse()
  2. 调用模板,进行渲染
      2.1 先load模板,再渲染
      2.2 直接使用render一步到位

render(request, template_name , context)
request
  请求体对象
template_name  模板路径
context  字典参数,用来填坑

HttpResponse

属性: 

  •   content  返回的内容
  •   charset  编码格式
  •   status_code  响应状态码(200,3xx,404,5xx)
  •   content-type  MIME类型

    MIME类型

  • 作用:指定传输数据使用哪种形式打开
  • 格式:大类型/小类型

    • image/png
    • image/jpg失真率高,可压缩空间大,不支持透明文件

    方法

  •   init  初始化内容
  •   write(xxx)  直接写出文本
  •   flush()  搭配write,冲刷缓冲区,理解成马桶,用完了冲一次
  •   set_cookie(key,value='xxx',max_age=None,exprise=None)
  •   delete_cookie(key)  删除cookie,上面那个是设置

    子类

  • HttpResponseRedirect

    • 重定向,暂时
    • 302
    • 简写  redirect
  • JsonResponse

    • 以Json格式返回数据
    • 重写了__init__,序列化Json数据,指定content_type 为application/json
  • HttpResponsePermanentRedirect

    • 重定向,永久性
    • 301
  • HttpResponseBadRequest

    • 400
  • HttpResponseNotFound

    • 404
  • HttpResponseForbidden

    • 403
  • HttpResponseNotAllowed

    • 405
  • HttpResponseServerError

    • 500
  • Http404

    • Exception
    • raise 主动抛异常出来

    实践:HttpResponse

    建立一个新url

  url(r'^hello/', views.hello, name='hello')

views函数来返回一个内容为hello的response

def hello(request):
    return HttpResponse('hello')

我们也可以用新的方式返回

def hello(request):
    response = HttpResponse()
    response.content = '艾欧尼亚在召唤'
    return response


我们也可以在检查元素时查看requese请求的具体信息

如图,状态码,类型,大小,传输实践,等等

我们也可以在views视图中强行修改状态码:

def hello(request):
    response = HttpResponse()
    response.content = '艾欧尼亚在召唤'
    response.status_code = 404
    return response

如图,我们仍然可以访问到艾欧尼亚在召唤,但是状态码变为了404

强行修改状态码的原因

为了满足特殊需求

  1. 页面真的访问不存在,但是需要帮助客户端正确处理,比如说淘宝的宝贝不存在界面
  2. 比较坏的一件事,为了防止爬虫,爬虫在爬取数据的时候需要先请求我们,只有在请求成功的时候才会爬取数据,但是我们人为返回404代码这样就可以欺骗爬虫访问失败,以至于防止了爬虫的爬取数据。(开发与爬虫的博弈)

爬虫

  • 模拟人去请求数据
  • 提取数据
  • 存储数据

爬虫核心内容

  • 数据爬取
  • 数据提取
  • 数据存储
  • 提升效率

    • 进程
    • 线程
    • 协程

文件的扩展名只是标识作用,方便我们用关联的程序去打开,比如说一个音乐文件改成.jpg,但是我们依旧可以用音乐播放器去打开它,后缀对文件内容没有影响

flush刷新缓冲区


HttpResponse子类

HttpResponseRedirect

响应重定向:可以实现服务器内部跳转
      return HttpResponseRedict('/grade/2017')
使用的时候推荐使用反向解析

实践:HttpResponseRedirect

缩写为redirect
新建url:url('^getticket/', views.get_ticket, name='get_ticket')
views函数:

def get_ticket(request):
    if random.randrange(10) > 5:
        return HttpResponseRedirect('/app/hello')  # 模拟服务器正忙时,重定向至另外一个页面
    return HttpResponse('恭喜你抢到票了')

这样我们服务器便会重定向了

可以看到,我们的状态码是300多为重定向

我们也可以用反向解析将/app/hello硬编码进行更换,反向解析在views视图中的用法如下:

def get_ticket(request):
    if random.randrange(10) > 5:
        url = reverse('app:hello')
        return HttpResponseRedirect(url)  # 模拟服务器正忙时,重定向至另外一个页面
    return HttpResponse('恭喜你抢到宝贝了')

JsonResponse

返回Json数据的请求,通常用在异步请求上,前后端分离
  JsonResponse(dict)
也可以使用__init__(self,data)设置数据
Content-type是application/json

json简介
  • JsonObject

    • {  }
    • key - value
  • JsonArray

    • [   ]
    • 列表中可以是普通数据类型,也可以是JsonObject
  • JsonObject和JsonArray可以嵌套
  • 给移动端的 Json,用JsonResponse
  • 给Ajax,用JsonResponse

    • 前后端
    • DRF框架
  • Google Chrome

    • JsonFomatter格式化JSON结构

    实践:JsonResponse

    url:url('^getinfo/', views.get_info, name='get_info'),
    views:


def get_info(request):
    data = {
        'status': 200,
        'msg': 'ok',
    }
    return JsonResponse(data=data)

可以看到返回的json

状态码具体区别

301永久性转移
302临时性转移

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏