"""
--视图概述:--
作用:视图接受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的更多相关文章

  1. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  2. Django路由配置系统,视图函数

    一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...

  3. Django路由配置系统、视图函数

    一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...

  4. Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式

    Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...

  5. Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间

    Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间 一丶URLconf配置 ...

  6. 第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

  7. 三 Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

    Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...

  8. Python--day67--include包含其他的url和反向解析URL

    1,include包含其他的url: 2,反向解析URL:

  9. Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化

    Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...

随机推荐

  1. python3.9 manage.py runserver 报错问题解决

    报错信息如下 You have 13 unapplied migration(s). Your project may not work properly until you apply the mi ...

  2. 题解 P3941 入阵曲

    题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...

  3. Python使用flask架构、跨域

    from flask import Flask import json from flask_cors import CORS Server = Flask(__name__) cors = CORS ...

  4. 十一:JavaWeb中的监听器(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  5. 基于mysql和Java Swing的简单课程设计

    摘要 现代化的酒店组织庞大.服务项目多.信息量大.要想提高效率.降低成本.提高服务质量和管理水平,进而促进经济效益,必须利用电脑网络技术处理宾馆酒店经营数据,实现酒店现代化的信息管理.本次课程设计运用 ...

  6. 【C语言】

    第3章 最简单的C程序设计 顺序程序设计 数据的表现形式及其运算 常量.变量.常变量.标识符 数据类型 整型.浮点型 整型数据的分类 最基本的整型类型 基本整型(int型):占2个或4个字节 短整型( ...

  7. playwright-python 处理Text input、Checkboxs 和 radio buttons(三)

    Text input 输入框输入元素,直接用fill方法即可,支持 <input>,<textarea>, [contenteditable] 和<label>这些 ...

  8. rest operater剩余操作符

    rest叫做剩余操作符(rest operator),是解构的一种,意思就是把剩余的东西放到一个array里面赋值给它.一般只针对array的解构 //rest叫做剩余操作符(rest operato ...

  9. constexpr-C++11

    constexpr和常量表达式 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式.显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常 ...

  10. PyQt5 笔记

    一.简介 pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法.这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS.pyqt5是 ...