django第二节课下

静态文件引用

django项目开发过程中,通过django.contrib.staticfiles提供静态文件服务,所以确保它在INSTALLED_APPS配置中。

路径设置

静态文件的设置有两个:
1、静态文件目录
在项目根目录下创建static文件夹,然后配置STATICFILES_DIRS

# setting.py
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

2、静态配置静态文件

<link rel="stylesheet" href="/static/crm/css/base.css">

缺点,如果有很多静态文件,且后期修改了static的名称或路径,需要全部修改
3、动态配置静态文件

{% load static %}
<link rel="stylesheet" herf="{% static 'crm/css/base.css' %}">

请求和响应

web框架本质就是处理用户发起的请求,然后返回响应结果,请求和响应就是框架中的数据流。

请求

当页面被请求时,djgango会创建一个HttpRequest对象,该对象包含于请求的元数据。然后django加载适当的视图,将HttpRequest对象作为第一个参数传递给视图函数。每个视图负责返回一个HttpResponse对象。

HttpRequest 对象
常用属性
  • .body
    原始请求的body,类型是字节类型

  • .method
    代表请求中使用的http方法字符串,保证是大写字母,例如在函数视图中通过判断request.method来处理不同的逻辑:

if request.method == 'GET';
	do_something()
elif request.method == 'POST';
	do_something()
  • .GET

一个类似字典的对象,包含所有给定的HTTP GET参数(查询参数)

  • .POST
    一个类似字典的对象,包含所有给定表单格式的HTTP POST参数

  • Files
    一个类似字典的对象,包含所有上传的文件

响应

与django自动创建请求对象不同,创建响应对象是开发的责任。你写的每个视图都要负责实例化,填充和返回一个响应对象。

HttpResponse
传入字符串

典型的用法是将页面的内容以字符串或字节字符串的形式传递给HttpResponse构造函数:

from django.http improt HttpResponse
response = HttpResponse("Here's the text of the web page.")
response = HttpResponse("Text only,please", content_type="text/plain")
response = HttpResponse(b"Bytestrings are also accepted")

也可以增量的形式添加内容,你可以使用response作为这个类似文件的对象

response = HttpResponse()
response.write("<p>Here's the text of the web page.</p>")
response.write("<p>Here's another paragraph.</p>")
设置头字段

使用HttpResponse.headers设置和删除一个字典

response = HttpResponse()
response.header['Age'] = 120
del response.headers['Age']
设置状态码

直接传递参数status给构造函数

from django.http improt HttpResponse
response = HttpResponse("Here's the text of the web page.", status=200)
JsonResponse对象

一个HttpResonse的子类,用来创建json编码的响应。默认的Content-Type为application/json。第一个参数data应该是字典实例。如果safe参数设置为False它可以是任何json可序列化的对象。

典型的用法
from django.http import JsonResponse
response = JsonResponse({'foo': 'bar'})
response.content

>>>b'{"foo":"bar"}'

视图

在django中,视图是一个可调用的对象,能够接收客户的请求并返回响应。在视图中通过模型操作数据库,通过模板构造返回数据。
约定将视图放在名为views.py的文件里,这个文件放置在项目或应用目录里。
django中视图有两种

  • 函数视图
  • 类视图
函数视图

最简单的视图,就是一个普通的python函数,它接收web请求并发回一个web响应。例如:

from django.http import HttpResponse

def index(request):
	return HttpResponse("这是首页面")
特点:
  1. 逻辑清晰好理解
  2. 复用性较差
类视图

类视图是以类的形式组织视图,类视图并不能代替基于函数的视图,与函数视图相比,类视图有如下优势:

  • 与特定的HTTP方法关联,能通过单独的方法替代条件分支的处理不同的HTTP请求
  • 面向对象技术,可用于将代码分解为可重用的组件

返回登录页面

在crm/views.py文件中创建一个视图函数,需要配置路由

def login(request):
    """区分不同请求get post"""
    if request.method == 'GET':
        return render(request, 'crm/login.html')
    elif request.method == 'POST':
        """登录的逻辑"""
        # 获取参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 校验
        if username == 'xinlan' and password == '123456':
            return redirect('/crm/index/')
        else:
            return HttpResponse("用户名密码错误")

创建一个登录的login.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <h2>deng</h2>
    <form action="" method="post">
        <p>用户名:<input type="text" name="'username"></p>
        <p>密码:<input type="password" name="'password"></p>
        <p><input type="submit" value="登录"></p>
    </form>
</body>
</html>

在这里插入图片描述

注:当action为空时,数据请求会推送到当前路径,如上图,会将数据推送到http://127.0.0.1:8000/crm/login/。如果action=“/login”,则会推送到http://127.0.0.1:8000/login, 如果action=“login”,http://127.0.0.1:8000/crm/login/login/

CSRF报错

在这里插入图片描述
解决方法,关闭settings中中间键的crsf
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值