Django

xiaoxiao2021-02-28  52

视图介绍和项目准备

视图就是应用中的views.py文件中的函数 # 视图的第一个参数必须为HttpRequset对象, - 通过正则表达式组获取的位置参数 - 通过正则表达式组获得的关键字参数 # 视图必须返回一个HttpResponse对象或子对象作为响应 - 子对象:JsonResponse HttpResponseRedirect # 视图负责接受Web请求HttpRequest,进行逻辑处理返回响应HttpResponse给请求者 - 响应内容可以是HTML内容,404错误,重定项,json数据

项目准备

创建项目+创建应用+安装应用+配置模板路径+本地化+mysql数据库+URLconf+视图

URLconf

# 配置URLconf 1.settings.py中指定url配置 ROOT_URLCONF = “项目.urls” 2.项目中urls.py url(正则, include('应用.urls')) 3.应用中urls.py url(正则, views.函数名) # URL中取值 ## 如果想从URL中获取值,需要在正则表达式中使用分组,一下两种方式 位置参数:参数的位置不能错 url(r'^(\d+)/(\d+)/$', views.index), 关键字参数:参数的位置可以变,跟关键字保持一致即可 url(r'^(?P<value1>\d+)/(?P<value2>\d+)/$', views.index), # 注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式

错误视图

404错误:page not found视图 - url匹配不成功会发生404错误 400错误:bad request视图 - 来自客户端的安全方面非法操作会引发400错误 500错误:server error视图 - 在视图中代码运行报错会发生500错误 # 只需要在模板中定义指定html文件即可,不需要配置URLconf和准备视图,但是要配置模板加载路径 DEBUG = False # 线上模式 Django不在提供静态文件的处理,因为Django擅长处理动态逻辑,静态处理交给nginx服务器处理 ALLOWED_HISTS = ['*']

HttpRequest对象

HttpRequest对象属性几乎都是只读的,用于读取请求报文,不是用来设置请求报文的 # 常见属性 path:一个字符串,表示请求的页面的完整路径,不包含域名 method:一个字符串,表示请求使用的HTTP方法,常用值包括:GET、POST GET:一个类似于字典的QueryDict对象,含get请求方式的所有参数,?后面的内容 POST:一个类似于字典的QueryDict对象,含post请求方式的所有参数 FILES:一个类似于字典的QueryDict对象,包含所有的上传文件 COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串 encoding:一个字符串,表示提交的数据的编码方式 session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用 # QueryDict对象 * 定义在django.http.QueryDict中 * HttpRequest对象的GET、POST属性都是QueryDict类型的对象 * QueryDict类型的对象可以用来处理同一个键带有多个值的情况 * QueryDict类型的对象,键和值都是字符串类型 - 键是开发人员在编写代码时确定下来的 - 值是根据数据生成的 * 注意:QueryDict类型的对象不是字典,仅仅是类似字典的对象而已 - 相关方法 get(): 根据键获取值 - 如果一个键同时拥有多个值将获取最后一个值 - 如果键不存在则返回None值,可以设置默认值进行后续处理 dict.get('键',默认值) 可简写为 dict['键'] getlist():根据键获取值,值以列表返回,可以获取指定键的所有值 - 如果键不存在则返回空列表[],可以设置默认值进行后续处理 dict.getlist('键',默认值) # GET属性 * get请求时url格式,在请求地址结尾使用?,之后以“键=值”的格式拼接,多个键值对之间以&连接 一键一值 #参数 http://127.0.0.1:8000/get/?a=10&b=20&c=python 一键多值 #参数 http://127.0.0.1:8000/get/?a=10&b=20&a=python # POST属性 * 使用form表单提交请求时,method方式为post则会发起post方式的请求 # HttpResponse对象 * 在django.http模块中定义了HttpResponse对象的API * HttpRequset对象有Django创建,HttpResponse对象由开发人员创建 ## 常见属性 content: 表示返回的内容 charset: 表示response采用的编码字符集,默认utf-8 status_code: 返回的HTTP响应状态码 content_type: 指定返回数据的MIME类型,默认'text/html'(text/plain, text/xml, application/json) ## 常见方法 init: 创建HttpResponse对象后完成返回内容的初始化 write: 向响应体中写数据 set_cookie: 设置Cookie信息 # cookie是网站以键值对格式存储在浏览器中的一段纯文本信息,用以实现用户跟踪 # max_age是一个整数,表示在指定秒数后过期 # expires是一个datetime或timedelta对象,回话将在这个指定的日期/时间过期 # max_age与expires二选一 # 如果不指定过期时间,默认两个星期后过期 set_cookie('key', 'value', 'max_age=None', expires=None) delete_cookie: 删除指定的key的Cookie,如果key不存在则什么也不发生 delete_cookie('key') ### 调用模板-简写 render()函数和HttpResponse()函数都是返回数据给请求者 render()函数封装主要三个步骤 1.定义上下文-->获取模板-->渲染模板 2.该函数就是让模板语言去执行 # JsonResponse - JsonResponse 继承自HttpResponse,被定义在django.http模块中,接收字典作为参数(也可以接收列表作为参数) - 使用场景:当需要响应json数据给请求者,需要用到JsonResponse,响应内容格式默认json - JsonResponse的content_type默认为application/json ## 实现需求 1.准备URLconf,视图,模板 2.导入 jquery 静态文件 3.发起ajax请求 4.响应json字典 5.处理json字典,构造html内容 # HttpResponseRedirect - 前提:当服务器处理完某种逻辑,不需要用户点击界面,即可把该响应交给浏览器,浏览器收到该响应,读取响应当中的地址信息,最后跳转到响应当中的地址 -点击登录按钮的本质,不是跳转界面,是将登陆表单信息发送给服务器,服务器处理登陆成功,响应重定向给浏览器,浏览器自动跳转页面 - 从一个视图转到另外一个视图(本质是视图的请求地址),就是重定向,继承自HttpResponse,被定义在django.http模块中,返回状态码302 - HttpResponseRedirect 、 redirect(2个同级)

状态保持

浏览器请求服务器是无状态无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。实现状态保持两种方式:在客户端存储信息使用Cookie;在服务器端存储信息使用Session # Cookie ## key = value 的字符串 - Cookie:指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地的数据(通常经过加密) - 应用:判定注册用户是否已经登录网站。网站的广告推送。购物车 - Cookie基于域名安全,不同域名的Cookie是不能互相访问的 设置Cookie response.set__cookie('mark','hello') 读取Cookie c= request.COOKIES['mark'] 判断是否存在某个Cookie if request.COOKIES.has__key('mark') 删除Cookie response.delete__cookie('mark') # Session ## 默认session都已经准备好了可以直接使用 - 对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中 - 在服务器端进行状态保持的方案就是Session - Session依赖于Cookie ## Session存储 - Django默认启用Session,禁用就是将Session中间件注释即可 - 可以存储在数据库、缓存、Redis等,SESSION_ENGINE指定Session存储方式 存储在数据库(默认存储方式可不写) SESSION_ENGINE = 'django.contrib.sessions.backends.db' 存储在缓存中,丢失则不能找回,比数据库的方式读写更快 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' 混合存储:优先从本机内存中存取,如果没有则从数据库中存取 SESSION_ENGINE = 'django.contrib.sessions.backends.cache_db' ## Session操作 - 通过Session属性进行回话读写操作,以键值对的格式操作 设置Session # 先把状态保持的信息,写入到django_session表,再把该数据生成一个cookie信息,写入到浏览器 request.session['键'] = 值 读取Session request.session.get('键', 默认值) 删除指定键的值,在存储中只删除某个键对应的值 del request.session['键'] 清除所有键的值,在存储中删除所有键对应的值 request.session.clear() 清除Session数据,在存储中删除所有键及对应的值,形成空表 request.session.flush() 设置回话的超时时间(默认2周) request.session.set_expirt(value) 如果value是一个整数,会话将在value秒没有活动后过期 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期 如果value为None,那么会话则两个星期后过期

配置流程

# 创建项目 django-admin startproject 项目名称 # 创建应用 cd BookManager/ python manage.py startapp 应用名称 #修改解释器路径 /home/python/.virtualenvs/py3_django/bin/python # 运行服务器 python manage.py runserver # 生成、执行迁移 python manage.py makemigrations python manage.py migrate # 界面本地化 LANGUAGE_COOE="zh-Hans" TIME_ZONE="Asia/Shanghai" # 创建管理员 python manage.py createsuperuser # 配置URL ## 项目 url(r'^', include('Book.urls')), ## 应用 url(r'^booklist/$', bookList), # 配置mysql数据库 ## init下 import pymysql pymysql.install_as_MySQLdb() ## settings下 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'Bookdb', 'HOST': '192.168.80.132', 'PORT': '3306', 'USER': 'root', 'PASSWORD': 'mysql', } } # 创建模板文件夹templates,设置模板路径 "DIRS":[os.path.join(BASE_DIR, "templates")] # 创建静态文件夹static,设置文件路径 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] # 错误视图配置(线上模式) DEBUG = False ALLOWED_HISTS = ['*']
转载请注明原文地址: https://www.6miu.com/read-2624458.html

最新回复(0)