django url配置-反向解析-视图函数-HttpRequest对象-HttpResponse对象-cookies-session-redis缓存session
"""
--视图概述:--
作用:视图接受WEB请求,并响应WEB请求
本质:视图就是一个python中的函数
响应:
1.网页:
一、重定向
二、错误视图 400,500
2.json数据:
过程: --url配置--
配置流程:
一、指定根级url配置文件:在Setting.py文件中 ROOT_URLCONF = 'xindjago.urls'
二、urlpatterns:
1.一个url实例的列表
2.url对象:正则表达式---视图名称----名称
三、url匹配正则的注意事项:
1.如果想要从url获取一个值,需要对正则加()小括号
2.匹配正则前方不需要加反斜杠例:url(r'^students/$',views.index)即r'^后面不需要加/
3.正则前需要加r,表示字符串不转义 --引入其它url配置--
在应用中创建urls.py文件,定义本应用的url配置,在工程文件urls.py文件中配置include()方法例:
主:
from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^',include('xinapp.urls')),
#url(r'^',include('xinapp.urls',namespace="xinapp")), #这是另外一种方法URL反向解析用
] app中的urls.py配置
from django.conf.urls import url
from . import views
app_name = 'xinapp' #如果使用URL反向解析必须在应用的URLS中定义一个app_name,值为templates中项目的名称
urlpatterns = [
url(r'^$',views.index)
#url(r'^$',views.index,name="index") #URL反向解析用
] --URL的反向解析--
概述:如果在视图,模版中使用了硬编码,在url配置发生改变时,动态生成链接地址就是上同的 namespace 此命令
解析:在使用链接时,通过URL配置的名称,动态生成url地址
作用:1.使用URL模版 --视图函数--
一.定义视图:
1.本质:一个参数
2.视图参数:一个HttpRequest实例(request),通过正则表达式获取参数即加括号()
3.位置:一般在views.py中定义(也可以定义其它文件名,但DJANGO一般建议使用VIEWS.PY定义) --错误视图---:
一、404视图:在找不到网页时(url配置不成功时)返回
位置:在templates目录下定义404.html(注意千万不能放到templates目录下面app应用的目录下,只能放templates目录)
1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404页面</title>
</head>
<body>
<h1>页面丢失</h1>
<h2>{{ request_path }}</h2>
</body>
</html>
2.{{ request_path }} 导致错误的网址
3.写完后,需要配置setting.py
1.DEBUG 如果为True,永远不会调用404.html,要设置为False
2.ALLOWED_HOSTS = [] 设置为:ALLOWED_HOSTS = ['*']
二、500视图:在视图代码中出现错误(服务器代码)
三、400视图:错误出现在客服的操作 --HttpRequest对象--
概述:
1.服务器接收http请求后,会根据报文创建HttpRequest对象
2.视图的第一个参数就是HttpRequest对象
3.djago创建之后调用试图时传递给视图
属性:(这些都是字符串类型)
path:请求的完整路径(不包括域名和端口)
method:表示请求方式,常用的有GET,POST
encoding:表示浏览器提交的数据的编码方式,一般为UTF-8
GET:类似字典的对象,包含了get请求的所有参数
POST:类似字典的对象,包含了post请求的所有参数
FILES:类似字典的对象,包含了所有上传文件
COOKIES:就是一个字典,包含所有cookies
session:类似字典的对象,表示当前的会话
方法:
1. is_ajax() 如果是通过XMLHttpRequest发起的,返回True
QueryDict对象:
1.request对象中的GET,POST都属于QueryDict对象
2.方法:
get()
作用:根据键获取值,只能获取一个值
www.xinapp.com/abc?a=1&b=2&c=3
getlist()
作用:将键的值以列表的形式返回,可以获取多个值
www.xinapp.com/abc?a=1&a=2&c=3 GET属性:(获取浏览器传递给服务器的数据)
1.http://127.0.0.1:8000/suck/get1?a=1&b=2&c=3
举例:
def get1(request):
a = request.GET.get('a')
b = request.GET['b']
c = request.GET.get('c')
return HttpResponse(a +" "+ b+" " + c)
2.http://127.0.0.1:8000/suck/get2?a=1&a=2&c=3
举例:
def get2(request):
a = request.GET.getlist('a')
a1= a[0]
a2= a[1]
c = request.GET.get('c')
return HttpResponse(a1 +" "+ a2 +" "+ c) POST属性:
1.使用表单提交POST请求
2.在setting中,关闭CSRF
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', #注释掉此条就关闭了
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 3.使用POST实现表单提交
#展示表单
def showregist(request):
return render(request,'xinapp/regist.html')
#获取页面提交后的数据并打印
def regist(request):
name = request.POST.get('name')
gender = request.POST.get('gender')
age = request.POST.get('age')
hobby= request.POST.getlist('hobby')
print(name)
print(gender)
print(age)
print(hobby)
return HttpResponse("ok") --HttpResponse对象--
概述:
1.作用:给浏览器返回数据
2.HttpRequest是由Django创建,HttpResponse是由用户创建的
返回用法:
1.不调用模版,直接返回数据
from django.http import HttpResponse
def index(reqeust):
return HttpResponse("Ok")
2.调用模版,再返回数据,使用render方法
原型:render(request,templateName[,context])
作用:结合数据和模版,返回一个完整的HTML页面
参数:
request 请求体对象
templateName 模版路径
context(可选项) 传递给需要渲染在模版上的数据
示例:
def showregist(request):
return render(request,'xinapp/regist.html') 属性
1.content 返回内容的内容
2.charset 返回数据的编码格式
3.status_code 响应的状态码 200,304,404
4.content-type 指定输出的MIME类型
示例:
#response属性展示
def showresponse(request):
res = HttpResponse()
res.content = b'good'
print(res.content)
print(res.charset)
print(res.status_code)
print(res.content-type)
return res 方法
int 使用页面的内容实例化HttpResponse对象
write(content) 以文件的形式写入
flush 以文件的形式输了缓存冲区
set_cookie(key,value='',max_age=None,exprise=None) 设置cookies
delete_cookie(key) 删除cookie(注意,如果删除一个不存在的Key,就当什么都没有发生)
举例
def cookiestext(request):
res = HttpResponse()
# cookie = res.set_cookie("suck","good") #创建cookies值
cookie = request.COOKIES #把之前COOKIES值赋值给变量
res.write("<h1>"+cookie["suck"]+"</h1>") #把COOKIES值取出来
return res 子类HttpResponseRedirect
1.功能:重定向,服务器端的跳转
举例1:
from django.http import HttpResponse,HttpResponseRedirect
def index(request):
#好多数据库的操作,只需要使用一条重定向就可以
return render(request,'xinapp/index.html')
def index1(request):
return HttpResponseRedirect('/suck')
举例2:
#重定向
from django.http import HttpResponse,HttpResponseRedirect
def redirect1(request):
return HttpResponseRedirect('/suck/redirect2')
def redirect2(request):
return HttpResponse('我是重定向后的视图') 2.简写 redirect(to)
举例:
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
#重定向
def redirect1(request):
# return HttpResponseRedirect('/suck/redirect2')
return redirect('/suck/redirect2')
def redirect2(request):
return HttpResponse('我是重定向后的视图') 3.to推荐使用反向解析 子类JSonResponse
1. 返回json数据,一般用于异步请求
2. __init__(self,data)
3. data 字典对象
4. 注意:Content-type类型application/json 状态保持
概述:
1.http协议是无状态,每次请求都是一次新的请求,不记得之前的请求
2.客户端与服务器的一次通信就是一次会话
3.实现状态保持,在客户端或者服务端存储会话的数据
4.存储方式
一、cookies
它是所有数据都存储在客户端,如果要存储也是可以不要存储敏感的数据,不安全
二、session
所有数据都存储在服务端,在客户端用COOKIES存储session_id
5.状态保持的目的
在一段的时间内,跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据
6.注意
不同的请求者之间是不会共享这个数据,与请求者是一一对应的 启用session
1.在setting文件中的 INSTALLED_APPS 里面:django.contrib.sessions,默认是启用的
2.在setting文件中的 MIDDLEWARE 里面:django.contrib.sessions.middleware.SessionMiddleware,默认也是启用 使用session
1.启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
2.方法get(key,default=None) 根据键获取值
3.clear() 清空所有会话
4.flush() 删除当前的会话并删除会话的cookies
5.logout(request) 直接从from django.contrib.auth import logout 推荐使用此方法
示例
def main(request):
# 取session值
username1 = request.session.get('name','游客')
print(username1)
return render(request,'xinapp/main.html',{'username':username1}) def login(request):
return render(request,'xinapp/login.html') def showmain(request):
username= request.POST.get('username')
#存储session
print(username)
request.session["name"] = username
return redirect('/suck/main/') from django.contrib.auth import logout
def quit(request):
#清除session
logout(request) # 以下三个多是,推荐使用logout清除session
# request.session.clear()
# request.session.flush()
return redirect('/suck/main/') 设置session过期时间
1.set_expiry(value)
2.如果不设置,15天后会过期
3.它是一个整数,value值如果为10,即10秒:request.session.set_expiry(10)
4.时间对象
5. 0(数字零) 关闭浏览器时失效
6. None 永不过期 存储session的位置
1.数据库:默认存储在数据库中
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
2.缓存:只储存在本地内存中,如果丢失不能找回,比数据库快
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
3.数据库和缓存:优先从本地缓存中读取,读取不到再去数据库中获取
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db’
举例:
配置 settings.py,放在最后
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认) ---使用redis缓存session---
一、第一步
WINDOWS环境下(linux可以直拉使用源安装),需要安装redis程序,才使用第二步进行操作
windows下安装redis:
下载地址https://github.com/dmajkic/redis/downloads。下载到的Redis支持32bit和64bit。根据自己实际情况选择,我选择32bit。把32bit文件内容拷贝到需要安装的目录下,比如:D:\dev\redis-2.4.5。
打开一个cmd窗口,使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行 redis-server.exe redis.conf
重新打开一个cmd窗口,使用cd命令切换到指定目录(D:\dev\redis-2.4.5)运行 redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456,其中 127.0.0.1是本地ip,6379是redis服务端的默认端口,123456是redis密码 如修改redis密码:
输入 redis-cli.exe -h 172.16.1.114 -p 6379
输入 config get requirepass --获取所有密码
输入 config set requirepass password --password为密码
此时需要认证 auth password
下次登录直接输入 redis-cli.exe -h 172.16.1.114 -p 6379 -a password --启动成功 二、第二步
1.在Django安装session
pip install djago-redis-sessions
2.在setting中最底下添加此段代码
使用redis保存session数据
第一种:(注意,如果改密码必须重启redis服务,否则会报错)
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 4
SESSION_REDIS_PASSWORD = 'weilai'
SESSION_REDIS_PREFIX = 'session' 第二种:字典方式,改密码后不需要重启redis服务即可马上生效使用
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
'host': 'localhost',
'port': 6379,
'db': 0,
'password': 'weilai',
'prefix': 'session'
}
'''
django url配置-反向解析-视图函数-HttpRequest对象-HttpResponse对象-cookies-session-redis缓存session的更多相关文章
- day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...
- Django路由配置系统,视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- Django路由配置系统、视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...
- Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间
Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间 一丶URLconf配置 ...
- 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性
Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...
- 三 Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性
Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...
- Python--day67--include包含其他的url和反向解析URL
1,include包含其他的url: 2,反向解析URL:
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
随机推荐
- python3.9 manage.py runserver 报错问题解决
报错信息如下 You have 13 unapplied migration(s). Your project may not work properly until you apply the mi ...
- 题解 P3941 入阵曲
题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...
- Python使用flask架构、跨域
from flask import Flask import json from flask_cors import CORS Server = Flask(__name__) cors = CORS ...
- 十一:JavaWeb中的监听器(二)
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- 基于mysql和Java Swing的简单课程设计
摘要 现代化的酒店组织庞大.服务项目多.信息量大.要想提高效率.降低成本.提高服务质量和管理水平,进而促进经济效益,必须利用电脑网络技术处理宾馆酒店经营数据,实现酒店现代化的信息管理.本次课程设计运用 ...
- 【C语言】
第3章 最简单的C程序设计 顺序程序设计 数据的表现形式及其运算 常量.变量.常变量.标识符 数据类型 整型.浮点型 整型数据的分类 最基本的整型类型 基本整型(int型):占2个或4个字节 短整型( ...
- playwright-python 处理Text input、Checkboxs 和 radio buttons(三)
Text input 输入框输入元素,直接用fill方法即可,支持 <input>,<textarea>, [contenteditable] 和<label>这些 ...
- rest operater剩余操作符
rest叫做剩余操作符(rest operator),是解构的一种,意思就是把剩余的东西放到一个array里面赋值给它.一般只针对array的解构 //rest叫做剩余操作符(rest operato ...
- constexpr-C++11
constexpr和常量表达式 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式.显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常 ...
- PyQt5 笔记
一.简介 pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法.这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS.pyqt5是 ...