- 一对一
列子:
用户表(母表):
id name age
1 zekai 18
薪水表(子表):
id money us_id
1 2000 1 (只能出现一次)
class UserInfo(models.Model):
name = models.CharField(max_length=32)
age = models.CharField(max_length=32)
class Salary(models.Model):
money = models.CharField(max_length=32)
us = models.OneToOneField("UserInfo")
一对一查询:
### 查询:
## 正向查询(子表查母表):
### 1.11.22 :res.us.name
### 1.11.10 : res.母表表名小写.name
res = models.Salary.objects.filter(money="3000").first()
print(res.us.name)
列子:
用户表(母表):
id name age
1 zekai 18
薪水表(子表):
id money us_id
1 2000 1 (只能出现一次)
class UserInfo(models.Model):
name = models.CharField(max_length=32)
age = models.CharField(max_length=32)
class Salary(models.Model):
money = models.CharField(max_length=32)
us = models.OneToOneField("UserInfo")
一对一查询:
### 查询:
## 正向查询(子表查母表):
### 1.11.22 :res.us.name
### 1.11.10 : res.母表表名小写.name
res = models.Salary.objects.filter(money="3000").first()
print(res.us.name)
### 反向查询(母表查子表)
### obj.子表小写.子表列名 : res.salary.money
res = models.UserInfo.objects.filter(name='zekai').first()
print(res.salary.money)
- django列类型 (***************************************************)
mysql django
tinyint 无
smallint(unsigned) SmallIntegerField (PositiveSmallIntegerField)
数字 int (unsigned)) IntegerField (PositiveIntegerField)
mediumint 无
bigint(unsigned) BigIntegerField
float FloatField
decimal(5,2) : 200.23 DecimalField
char 无
字符串 varchar CharFiled
text TextField
时间 datetime (2019-7-17 12:23:34) DateTimeField
date (2019-7-17) DateField
- 参数:
max_length=32
null=True : 可以设置为null
db_index=True : 设置索引
default : 设置默认值
unique : 设置唯一索引
db_column: 设置一个列名
unique_together: 联合唯一索引
index_together :普通联合索引
class Meta:
unique_together = (
('money', 'us_id'),
....
)
index_together = (
('money', '')
....
)
-----------------------------------------------------------------------
djagno-admin:
django自带的管理后台系统
命令生成:
python3 manage.py createsuperuser
想要管理自己生成的表:
admin.py:
from app01 import models
admin.site.register(models.UserInfo)
django-admin中的列类型:
EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制
IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"
URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FileField(Field)
djagno-admin中的参数 :
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
django自带的管理后台系统
命令生成:
python3 manage.py createsuperuser
想要管理自己生成的表:
admin.py:
from app01 import models
admin.site.register(models.UserInfo)
django-admin中的列类型:
EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制
IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"
URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FileField(Field)
djagno-admin中的参数 :
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
choices = (
(1, '男'),
(2, '女')
)
gender = models.IntegerField(choices=chocies)
id name gender (男女)
2.分页
- djagno内置分页
- 自定制分页
3.CSRF攻击
Xss: 跨站脚本攻击
CSRF:跨站请求伪造
- 开启全局的csrf验证
1. settings中,打开注释 'django.middleware.csrf.CsrfViewMiddleware',
2. 表单中,开启csrf_token
<form>
{% csrf_token %}
<input type='text'>
</form>
如上, 全站都会进行csrf验证
- 关闭部分的csrf验证:
1. settings中,打开注释 ====》'django.middleware.csrf.CsrfViewMiddleware',
2. views中,引入如下函数
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def csrf1(request):
if request.method == 'GET':
return render(request, 'csrf1.html')
else:
return HttpResponse('ok')
如上, 即便全局开启验证,但是可以使用装饰器进行特殊处理,不使用
- 开启部分的CSRF验证:
1. settings中,注释 ====》#'django.middleware.csrf.CsrfViewMiddleware',
2. views中,引入如下函数
from django.views.decorators.csrf import csrf_protect
@csrf_protect
def csrf1(request):
if request.method == 'GET':
return render(request, 'csrf1.html')
else:
return HttpResponse('ok')
如上, 即便全局关闭验证,但是可以使用装饰器进行特殊处理
CBV:
若是CBV:
from django.utils.decorators import method_decorator
@method_decorator(csrf_protect, name='get')
class User(View):
def get(self, request):
pass
def post(self, request):
pass
choices = (
(1, '男'),
(2, '女')
)
gender = models.IntegerField(choices=chocies)
id name gender (男女)
2.分页
- djagno内置分页
- 自定制分页
3.CSRF攻击
Xss: 跨站脚本攻击
CSRF:跨站请求伪造
- 开启全局的csrf验证
1. settings中,打开注释 'django.middleware.csrf.CsrfViewMiddleware',
2. 表单中,开启csrf_token
<form>
{% csrf_token %}
<input type='text'>
</form>
如上, 全站都会进行csrf验证
- 关闭部分的csrf验证:
1. settings中,打开注释 ====》'django.middleware.csrf.CsrfViewMiddleware',
2. views中,引入如下函数
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def csrf1(request):
if request.method == 'GET':
return render(request, 'csrf1.html')
else:
return HttpResponse('ok')
如上, 即便全局开启验证,但是可以使用装饰器进行特殊处理,不使用
- 开启部分的CSRF验证:
1. settings中,注释 ====》#'django.middleware.csrf.CsrfViewMiddleware',
2. views中,引入如下函数
from django.views.decorators.csrf import csrf_protect
@csrf_protect
def csrf1(request):
if request.method == 'GET':
return render(request, 'csrf1.html')
else:
return HttpResponse('ok')
如上, 即便全局关闭验证,但是可以使用装饰器进行特殊处理
CBV:
若是CBV:
from django.utils.decorators import method_decorator
@method_decorator(csrf_protect, name='get')
class User(View):
def get(self, request):
pass
def post(self, request):
pass
ajax:
csrftoken = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
type:"POST",
url : '/xxxx/',
data: {"name":'xxxx'},
headers : {'X-CSRFToken': token},
success: function(){
console.log(data)
}
})
csrftoken = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
type:"POST",
url : '/xxxx/',
data: {"name":'xxxx'},
headers : {'X-CSRFToken': token},
success: function(){
console.log(data)
}
})