Django框架知识要点总结笔记

哪些请求方式在请求地址的时候可以带请求体?

只有PATCH、POST、PUT、DELETE访问一个url地址时可以带请求体

web框架和web服务器

在这里插入图片描述
web框架:flask Django

作用:

1.路由分发(根据url找到对应的处理函数)

2.调用处理函数进行业务处理。

web服务器 app.run()

作用:

1.解析请求报文,调用框架程序处理请求。

2.组织响应报文,返回内容给客户端。

web框架学习方法

  • 如何搭建工程程序

    工程的组建

    工程的配置

    路由定义

    视图函数的定义

  • 如何获取请求数据(操作request对象)

  • 如何构造响应数据(构造response对象)

  • 如何使用中间层

    请求钩子

  • 框架提供的其他功能组件

    数据库

    模板

    admin

Django简介

Django的主要目的是简便、快速的开发数据库驱动的网站。强调代码复用、快速开发和DRY(不要自己重复造轮子)原则。

特点

1.重量级框架

Django原生提供了众多的功能组件,让开发更简便快速。

  • 提供项目工程管理的自动化脚本工具
  • 数据库ORM支持(对象关系映射,英语Object Relational Mapping)
  • 模板
  • 表单
  • Admin站点
  • 文件管理
  • 认证权限
  • session机制
  • 缓存
2.MVT开发模式

Model(模型)-View(视图)-Template(模板)

Model,负责和数据库交互,进行数据处理

View,用于接收请求,处理业务逻辑

Template,负责封装构造要返回的html

其实和MVC框架一样

Django框架环境安装&项目创建

1)命令
mkvirtualenv name -p python3  # 创建虚拟环境
workon name # 进入虚拟环境
pip install django==1.11.11 # 安装django
cd 目录  # 切换目录
django-admin startproject <项目名称> # 创建项目
python manage.py startapp #创建子应用
2)进行子应用注册

点开项目目录下的settings,在INSTALLED_APPS中配置

在这里插入图片描述

3)启动

python manage.py runserver

定义视图函数

定义在子应用的views.py中

需要request接收请求并返回响应对象

def index(requset):
    """request:接收请求对象"""
    # 返回相应对象
    return HttpResponse('hello world')

URL配置

1) 在子应用中创建urls.py,设置子应用中url地址和视图函数之间的对应关系
from django.conf.urls import url
from users import views

urlpatterns = [
    # 添加当前子应用中url地址和视图函数之间的对应关系
    # url('地址url正则表达式','对应视图函数')
    url(r'index',views.index),
]
2)在项目总的urls.py文件中包含子应用中的urls.py文件
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 包含子应用中urls.py文件
    url(r'^users/',include('users.urls'))
]
3)Django路由匹配过程说明

先找项目总的urls.py中正则匹配url地址,调用视图函数,再进入子应用中的urls.py进行正则匹配,调用视图函数
在这里插入图片描述

4) 路由配置时两个注意点:

子应用中进行url配置时,严格匹配开头和结尾

Django url 地址配置的默认风格时:末尾加/

url(r'^index/$', views.index)
5)Django路由配置-url地址的反向解析

总的应用中定义别名用namespace=’’

url(r'^users/', include('users.urls', namespace='users')),

子应用中定义别名用name=’’

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

根据视图获取对应的url地址,通常配合重定向进行使用。

def url_reverse(request):
    # 获取index视图所对应的url地址
    from django.urls import reverse
    req_url = reverse('users:index')
    return HttpResponse('OK')

配置文件settings.py

1)BASE_DIR(根目录)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
2)DEBUG
  • 修改代码文件,程序自动重启
  • Django程序出现异常时,向前端显示详细的错误追踪信息
3)中国语言与时区

在settings.py中配置

# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

# LANGUAGE_CODE = 'en-us' # 设置语言
LANGUAGE_CODE = 'zh-Hans' # 设置语言

# TIME_ZONE = 'UTC' # 设置时区
TIME_ZONE = 'Asia/Shanghai' # 设置时区
4)静态文件的使用

在settings.py中配置

1)设置访问静态文件路径的前缀地址

2)指定Django中静态文件存放的目录

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 设置访问静态文件路径的前缀地址
STATIC_URL = '/static/'
# 指定Django中静态文件存放的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

请求参数传递

4种传参方式
1.通过url地址传递参数(利用正则表达式提取参数的方法从url中获取请求参数)
#/weather/城市名/年份/:比如:/weather/shanghai/2019/
#flask: 路由转换器 /weather/<city>/<int:year>
#Django:

#未命名参数按定义顺序传递,正则需要小括号括起来,分组
#在urls中配置正则
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),

#在视图函数中获取
def weather(request, city, year):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')
    
#命名参数按名字传递
#在urls中配置正则 ?P给参数起别名
url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),

#在视图函数中获取
def weather(request, year, city):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')
2.请求参数传递(通过查询字符串传参)
# /qs/?a=1&b=2&c=3&c=4
# flask:request.args
def get_qs(request):
    # 获取查询字符串的参数
    a = request.GET.get('a')
    b = request.GET.get('b')
    c = request.GET.get('c') # ,如果c对应多个值,默认只查询到最后一个值 
    clist = request.GET.getlist('c') # 使用此方法可以查询c的列表
    return HttpResponse('OK')
    
3.通过请求体传递参数(json数据或表单)
表单数据:/from_data/

request.POST:QueryDict类型的对象,允许一个键对应多个值

request.POST.get('name')
request.POST.get('age')

<from methods='get' action='提交地址'>
	<input type='text' name='a'/>
	<input type='text' name='b'/>
	<input type='submit' value='提交'/>
</from>

json数据:/json_data/
request.body

import json
def get_body_json(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6 无需执行此步
    req_data = json.loads(json_str)
    print(req_data['a'])
    print(req_data['b'])
    return HttpResponse('OK')

注意:使用postman必须注释csrf功能ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyj1189

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值