Django框架
Django框架
特点:
快速开发 安全可靠 超可伸缩性
使用templates时,要在setting当中加一个
‘DIRS‘: [os.path.join(BASE_DIR,‘templates‘)],
创建应用 python3 manage.py startapp app_name 可以将tamplates设置成为模板文件,会增加提示
实现一个请求
注册一个路由 urls中 -ulr -参数1 匹配规则,正则 视图函数 对应的是views中的一个函数 没有括号 去views实现对应的视图函数 函数当中的第一个参数是request 永远记得返回Response
路由问题
1.在使用正则时,一段域名要加上小括号,还要引入re_path模块,每一组正则表达式组都表示一段路径。 2.404问题:要把setting中的debug改为false,以及ALLOWED_HOSTS = [‘*‘] 关闭进程:sudo fuser -k 8000/tcp
setting数据库配置
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘user‘, #库名 ‘USER‘: ‘root‘, #用户名 ‘PASSWORD‘: ‘123456‘, ‘HOST‘: ‘127.0.0.1‘, ‘PORT‘: ‘3306‘, } }
模型配置
1,修改setting中的配置文件,DATABASES,在INSTALLED_APPS,加入应用名 2,在项目同名的目录下中的__init__.py中 import pymysql pymysql.install_as_MySQLdb() 3.找到应用下的models.py (1)生成迁移文件:在manager.py makemigrations 会在应用的migrations目录下生成一个迁移文件 (2)执行迁移 python3 manage.py migrate
例子:
def selectuser(request): res = models.User.objects.all()#获取全部数据 print(res) for i in res: print(i.username) return HttpResponse(‘查询数据‘) def insertuser(request): userinfo = models.User() userinfo.username=‘xiaomengmeng‘ userinfo.password=‘123456‘ userinfo.email=‘‘ userinfo.save() return HttpResponse(‘插入数据‘) def updateuser(request): userinfo = models.User.objects.get(id=1)#获取单条数据 userinfo.username=‘xiaojiejie‘ userinfo.save() return HttpResponse(‘修改数据 ‘) def deluser(request): userinfo = models.User.objects.get(id=1) userinfo.delete() return HttpResponse(‘删除数据‘)
HttpRequest对象
服务器接收到http的协议请求后,会跟据报文创建HttpRequest对象; 视图函数的的第一个参数是HttpRequest对象; 在Django.http模块中定义了HttpRequest对象的API
HTTPRequest对象属性
1.path:一个字符串,表示请求页面的完整路径,不包含域名 2.method:一个字符串,表示请求时用的HTTP方法,常用的有:‘GET‘,‘POST‘ encoding:一个字符串,表示提交的数据的编码方式 3.GET:一个类似于字典的对象,包含get请求方式的所有参数 4.POST:一个类似于字典的对象,包含POST请求的所有参数 5.FILES:一个类似于字典的对象,包含所有上传的文件 6.COOKIES:一个标准的Python字典,包含所有的cookie,键和值都是字符串 7.session:一个即可读又可写的类似于字典的对象,表示当前会话,只有当Django启用会话的支持才可用。
方法:is_ajax():如果是通过XMLHttpRequest发起的,则返回True
HTTPResponse对象
在Django.http模块定义了HttpResponse对象的API; Httprequest有Django自动创建,HTTPResponse有程序员创建
1,可以不使用模板,直接返回数据 from django.http import HttpResponse def index(request): return HttpResponse 2,调用模板,返回数据 return render(request,‘user/edit.html‘,{‘info‘:‘你好‘}) 3,子类HTTPResponseredirect 重定向,服务端跳转 构造函数的第一个参数用来指定重定向的地址,可简写为redirect from django.shortcuts import redirect from django.core.urlresolvers import reverse def index(request): return redirect(reverse(‘myindex‘)
子类jsonresponse 返回json数据,一般用于异步请求,帮助用户创建json编码的响应 JsonResponse的默认Content-Type为application/json
from django.http import JsonResponse def index2(requeset): return JsonResponse({‘list‘: ‘abc‘})
cookies
cookie是服务器保存在客户端(浏览器上的小文本文件),他可以包含有关用户的信息 cookies最典型的应用是判定注册用户是否已经登录网站
设置cookie
获取当前的响应对象 response= HTTPResponse(‘cookie的设置’) 使用相应对象进行cookie的设置 response.set_cookie(‘a‘,‘abd‘) 返回响应对象 return response
获取cookie
读取 a = request.COOKIES.get(‘a‘,None) if a: return HTTPResponse(‘cookie:‘+a) else: return HTTPResponse(‘cookie不存在‘)
Template模板
在settin.py当中把模板路径添加进去 ‘DIRS‘:[os.path.join(BASE_DIR,‘templates‘)]
变量
1.变量输出语法:{{ var }} 当模板引擎遇到一个变量,将计算这个变量,然后将结果输出 2.变量名必须由字母,数字,下划线(开头不能是下划线)和点组成 3,当模板遇到点会按照下列顺序查询 - 字典查询:fpp[‘name‘] - 属性或方法查询:fpp.bar - 数字索引查询,foo[bar]
标签
语法{% tag %} for 标签 {% for....in.... %} 逻辑 {% endfor %}
if标签
{ % if ... % } 逻辑1 { % elif ... % } 逻辑2 { % else % } 逻辑3 { % endif % }
comment标签
{ % comment % } 多行注释 { % endcomment % }
include:加载模板并以标签内的参数渲染
{ % include "base/index.html" % }
url:反向解析
{ % url ‘name‘ p1 p2 % }
csrf_token:这个标签用于跨站请求伪造保护
{ % csrf_token % }
3.过滤器
{{变量|过滤器}},例如:{{name|lower}},将name的值变为小写输出
- 使用管道夫号(|)来应用过滤器
模板继承
作用:
1.模板继承能够减少页面内容的重复定义,实现页面内容的重用
应用范围
网站的头部尾部,这些内容定义在父模板当中,子模板不需要重复定义
block标签:在父模板当中预留区域,在子模板中填充
extends继承:继承写在模板文件的第一行
例子:
- 定义父模板base.html
{% block block_name %} 定义默认值 {% endblock %}
- 定义子模板index.html
{% extends "base.html" %}
- 在子模板中使用block填充预留区域
{% block block_name %} 实际填充内容 {% endblock %}