django复习
Django回顾
1 web应用
本质是基于socket实现的应用程序
浏览器-----------服务器
2 http协议:应用层协议
1 基于TCP协议
2 基于请求响应
3 短连接
4 无状态保存(引入了cookie,session技术)
请求协议
浏览器----------->服务器
<------------
响应协议
请求协议
''
请求首行 GET path?get数据 HTTP/1.1
请求头
userAgent: win Chorome/IPhone
contentType:json application/x-www-form-urlencoded
空行
请求体(post才有请求体)
a=1&b=2
{"a":1,"b":2}
''
如何给服务器发送json数据
给服务器发送请求方式:
1 地址栏 get请求
2 form表单 get post请求 (无法发送json数据)
3 a标签连接请求 get请求
4 Ajax请求 get(查) post(提交数据添加记录) put(更新) delete(删除) ......
$.ajax({
url:"/index/",
type:"post",
data:{
a:1,
b:2
}, # 默认urlencoded编码
success:function(res){
}
})
发送json数据
$.ajax({
url:"/index/",
type:"post",
contentType:"json"
data:JSON.stringfy({
a:1,
b:2
}),
success:function(res){
}
})
注意:Django解析不了json数据,只能自己利用request.body解析
响应协议
响应首行 HTTP/1.1 200 OK
响应头
contentType:"json"
...
空行
响应体
响应状态码:
1开头: 请求中
200:请求成功
3开头:重定向
4: 文件路径找不到
5:服务器错误
Django
MTV+url路由分发:
M: model.py
T: Template:存放模板文件
V: 视图 逻辑
url路由分发:
反向解析:
url(r'^role/add/$', views.role, name='role_add'),
url(r'^role/edit/(\d+)/$', views.role, name='role_edit'),
视图:
path=reverse("role_add") # "role/add/"
path=reverse("role_edit",args=(1,2)) # "role/edit/1/"
模板:
{% url 'role_add' %}
{% url 'role_edit' 2 %}
名称空间:
re_path(r'^app01/', include(("app01.urls","app01"),namespace="app01",)),
视图函数:
request对象:存储这次请求所有请求信息:
属性:
HttpRequest.GET
HttpRequest.POST
---- urlencoded编码
---- 注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
request.POST.getlist("hobby")
HttpRequest.body 一个字节串,代表请求报文的主体。
HttpRequest.path
ttpRequest.method
HttpRequest.META 请求头
HttpRequest.FILES
HttpRequest.COOKIES
HttpRequest.session session中间件 源码
HttpRequest.user 认证中间件 源码
方法:
HttpRequest.get_full_path()
HttpRequest.is_ajax()
HttpResponse对象:
obj=HttpResponse("hello")
obj=render(request,"index.html")
obj=redircet("/index/")
FBV与CBV : ******源码流程
views:
from django.views import View
class BookView(View):
def get(self,request):
pass
def post(self,request):
pass
urls.py:
url("books",BookView.as_view())
模板层:
含有模板语法的html文件成为模板文件
render方法渲染引擎
模板语法:
{{}}:渲染变量
---- 深度查询 句点符. 注意: .无参方法
---- 过滤器 date,safe,add,slice,
{% %}:渲染标签
{%for i in [111,222,333]%}
{%if i!= 222%}
<p>i</p>
{%endif%}
{%endfor%}
自定义标签和过滤器
1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
2、 在app中创建templatetags模块(模块名只能是templatetags)
3、 创建任意 .py 文件,如:my_tags.py
from django import template
register = template.Library() #register的名字是固定的,不可改变
@register.filter
def filter_multi(v1,v2):
return v1 * v2
@register.simple_tag
def simple_tag_multi(v1,v2):
return v1 * v2
4、模板中使用:
{% load my_tags %}
# num=12
{{ num|filter_multi:2 }} #24
{{ num|filter_multi:"[22,333,4444]" }}
继承 extend:
创建base.html:
构建钩子
{%block css%}
{%endblock css%}
{%block content%}
<p>123</p>
{%endblock%}
{%block js%}
{%endblock js%}
子模板继承:
{%extends 'base.html' %}
{%block content%}
<p>111</p>
{%endblock%}
ORM:
class Book(model.Model):
title=models.CharFiled(max_length=32)
类-----------------表 # Book------- app01_book
属性变量-----------字段 # title------ title
属性对象-----------约束 # models.CharFiled(max_length=32)
类实例对象---------表记录
单表操作
model的元类信息:
Book._meta.verbose_name
'书籍'
Book
<class 'app01.models.Book'>
Book._meta.model_name
'book'
Book._meta.app_label
'app01'
class Book(models.Model):
title=models.CharField(max_length=32,verbose_name="书籍名称")
def __str__(self):
return self.title
class Meta:
app_label="APP01"
db_table="app01book"
unique_together=["title","price"]
verbose_name="书籍"
ordering=["price"]
class Book(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
state=models.BooleanField()
pub_date=models.DateField()
price=models.DecimalField(max_digits=8,decimal_places=2)
publish=models.CharField(max_length=32)
更多参数:
(1)null
如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
blank
如果为True,该字段允许不填。默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。
(2)default
字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
(3)primary_key
如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
否则没必要设置任何一个字段的primary_key=True。
(4)unique
如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
(5)choices
由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,<br>而且这个选择框的选项就是choices 中的选项。
数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms', # 要连接的数据库,连接前需要创建好
'USER':'root', # 连接数据库的用户名
'PASSWORD':'', # 连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306 # 端口 默认3306
},
'app01': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms', # 要连接的数据库,连接前需要创建好
'USER':'root', # 连接数据库的用户名
'PASSWORD':'', # 连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306 # 端口 默认3306
},
}
添加记录:
类装饰器
imageField
FileField
media
数据库备份命令
https://www.cnblogs.com/yuanchenqi/articles/6755717.html

浙公网安备 33010602011771号