Django入门笔记二

基本的注册和创建流程

  • 虚拟环境将版本,包,文件进行隔离
  • 安装django包不要加sudo,否则会安装在本地
  • 创建流程
    1.创建工程
    2.创建应用
    3.定义视图(在view.py中定义视图函数,参数为请求对象,返回响应对象)
    4.定义路由(主路由到子路由,由上至下进行匹配,注意:$不能用在主路由中,否则无法匹配到子路由)
    配置文件中的BASE_DIR是一个动态的文件绝对路径
  • 注册APP---设置路由(总和子)---定义视图函数
请求Request
  1. HTTP协议向服务器传参的途径
  • 提取URL中的特定部分.如/beijing/2018,在服务器端的路由中用正则表达式截取.
  • 查询字符串(query string).URL中路径后面?key1=value1&key2=value2.
  • 请求体(body)中发送的数据.比如表单数据、json、xml。
  • 在http报文的头(header)中。
  1. URL路径参数
    定义路由URL时,使用正则表达式提取参数的方法,从URL中获取请求参数,Django将提取的参数传递给视图函数的传入参数。
    在路由地址中,用分组(正则表达式)设置url地址要传递的参数
url(r'users/index/(?P<param2>\d+)/(?P<param1>/w*)', views.index)
  • 未命名按照参数定义顺序传递(浏览器访问/.../..../.../....)
    urls中正则匹配
  • 命名参数按照参数名称传递(浏览器访问?key1=value1&key2=value2)
    传参不按照位置,给正则命名?P<命名>
  • 在views.py中 获取参数
    视图函数中使用request.GET这个属性得到所有请求的字符串,返回类型QueryDict(支持一键多值,[]/get()和getlist()获取请求参数
  1. Post请求
  • 发送请求体数据的请求方式有POST、PUT(全字段携带修改)、PATCH(特定字段修改)、DELETE,
  • Django默认开启了CSRF防护,在settings.py文件中注释掉CSRF中间件
  • post请求的请求体发送form表单数据(post请求)
    视图函数中使用request.POST这个属性得到POST请求的请求体的表单数据,返回类型QueryDict(支持一键多值
    []/get()和getlist()获取请求参数
  • post请求的请求体发送非form表单数据(Json/str/xml)
    视图函数中使用request.body这个属性得到POST请求的请求体的非表单数据,返回类型Bytes, 用loads将Json的str转成dict
    以上3和4,用postman发送post请求(浏览器不支持POST请求)
  1. header头
  • request.META属性获取请求头headers中的数据,request.META为字典类型
    请求头如下:
CONTENT_LENGTH – The length of the request body (as a string).
CONTENT_TYPE – The MIME type of the request body.
HTTP_ACCEPT – Acceptable content types for the response.
HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
HTTP_HOST – The HTTP Host header sent by the client.
HTTP_REFERER – The referring page, if any.
HTTP_USER_AGENT – The client’s user-agent string.
QUERY_STRING – The query string, as a single (unparsed) string.
REMOTE_ADDR – The IP address of the client.
REMOTE_HOST – The hostname of the client.
REMOTE_USER – The user authenticated by the Web server, if any.
REQUEST_METHOD – A string such as "GET" or "POST".
SERVER_NAME – The hostname of the server.
SERVER_PORT – The port of the server (as a string).
  • 其他HttpRequest对象属性
    method:字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
    user:请求的用户对象。
    path:字符串,表示请求的页面的完整路径,不包含域名和参数部分。
    encoding:字符串,表示提交的数据的编码方式,使用浏览器的默认设置,一般为utf-8,通过修改它来修改访问表单数据使用的编码,对属性的任何访问将使用新的encoding值。
    FILES:一个类似于字典的对象,包含所有的上传文件。
响应Response
  • 视图在接收请求并处理后,必须返回HttpResponse对象或子对象
  • HttpRequest对象由Django创建,HttpResponse对象由开发人员创建
  • 使用django.http.HttpResponse来构造响应对象
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
  • 通过HttpResponse对象属性来设置响应体、状态码
content:表示返回的内容。
status_code:返回的HTTP响应状态码
#响应头可以直接将HttpResponse对象当做字典进行响应头键值对的设置
response = HttpResponse()
response['Itcast'] = 'Python'  # 自定义响应头Itcast, 值为Python
  • HttpResponse子类,快速设置状态码,django对状态码进行了封装
HttpResponseRedirect 301
HttpResponsePermanentRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseNotFound 404
HttpResponseForbidden 403
HttpResponseNotAllowed 405
HttpResponseGone 410
HttpResponseServerError 500
  • JsonResponse
    返回json数据,可以使用JsonResponse来构造响应对象,作用:
    1.数据转换为json字符串
    2.设置响应头Content-Type为 application/json

  • redirect重定向

from django.shortcuts import redirect
def demo_view(request):
    return redirect('/index.html')
Cookie
  • 服务器端生成,存储在客户端
  • Cookie以键值对Key-Value存储信息。
  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的
  • 设置Cookie
    HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
def demo_view(request):
    response = HttpResponse('ok')
    response.set_cookie('itcast1', 'python1')  # 临时cookie
    response.set_cookie('itcast2', 'python2', max_age=3600)  # 有效期一小时
    return response
  • 获取Cookie
    通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值,request.COOKIES为字典类型
def demo_view(request):
    cookie1 = request.COOKIES.get('itcast1')
    print(cookie1)
    return HttpResponse('OK')
Session

-称为会话控制,Session 对象存储特定用户会话所需的属性及配置信息,是存储用户的首选,session在 Web服务器上保持用户的状态信息供在任何时间从任何设备上的页面进行访问,保持会话状态。
-存储在服务器端(为解决session共享问题,通常存储在数据库,为了效率,选Redis)

  • 依赖cookies(服务器在响应浏览器时,返回cookie,带有sessionid)
  • 启用Session
    Django项目默认启用Session,settings.py文件中将session中间件注释即可禁用Session
  • 存储方式
    settings.py文件中,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。
  1. 数据库
    存储在数据库中,这是默认存储方式,在项INSTALLED_APPS中安装
SESSION_ENGINE='django.contrib.sessions.backends.db'

操作Session包括三个数据:键,值,过期时间

  1. 本地缓存
    存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快
SESSION_ENGINE='django.contrib.sessions.backends.cache'
  1. 混合存储
    优先从本机内存中存取,如果没有则从数据库中存取
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
Redis
  • 在redis中保存session,需要引入第三方扩展,使用django-redis
pip install django-redis  #安装扩展
#setting.py中设置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
Session的操作

通过HttpRequest对象的session属性进行会话的读写操作

request.session['键']=值  #以键值对的格式写session
request.session.get('键',默认值)  #根据键读取值
request.session.clear()  #清除所有session,在存储中删除值部分
request.session.flush()   #清除session数据,在存储中删除session的整条数据
del request.session['键']  #删除session中的指定键及值,在存储中只删除某个键及对应的值
request.session.set_expiry(value)  #设置session有效期
关于有效期:
value为整数,session在value秒没有活动后过期。
value为0,用户session的Cookie在用户的浏览器关闭时过期。
value为None,session有效期采用系统默认值(两周),在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,059评论 0 8
  • 一、Django框架前言知识: 1、C/S和B/S的区别: C/S结构软件:客户端/服务端软件,即客户端要自己下载...
    月下独酌123阅读 4,479评论 0 36
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,593评论 1 49
  • 请求与响应 一、请求与响应 请求与响应过程 当用户请求一个页面时,Django 把请求的数据包装成一个 HttpR...
    一纸繁鸢w阅读 297评论 0 0
  • Django 1. 特点 快速开发:Django的宗旨在于帮助开发人员快速从概念到完成应用程序。 安全可靠:Dja...
    蛋挞先生L阅读 485评论 0 0