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 %}