自关联
- 自关联
- 多对多关联
models.py:
#### 自关联
class User(models.Model):
name = models.CharField(max_length=32)
gender_list = [
(1,'男'),
(2,'女')
]
gender = models.IntegerField(choices=gender_list, default=1)
m = models.ManyToManyField('User')
views.py:
#### 查询和zekai约会的姑娘
res = models.User.objects.filter(name='zekai', gender=1).first()
#print(res) ### obj
objs = res.m.all()
'''
1. select * from app01_user_m where from_user_id = 1 ### to_user_id=[3,4]
2. select * from app01_user where id in (3,4)
'''
for obj in objs:
print(obj.name)
#### 查询和cuihua约会的男生
res = models.User.objects.filter(name='cuihua', gender=2).first()
objs = res.user_set.all()
'''
1. select * from app01_user_m where to_user_id = 3 ### from_user_id=[1,2]
2. select * from app01_user where id in (1,2)
'''
for obj in objs:
print(obj.name)
authlogin
数据是在auth_user里面
创建用户方式 是在 tool工具createsuperuser ,数据自动存放到auth_user
除了这种创建方式之外,还有个方法:
from django.contrib.auth.models import User
def register(request):
if request.method=='GET':
return render(request,'register.html')
else:
username=request.POST.get('username')
password=request.POST.get('password')
User.objects.create_superuser(username=username,password=password,email='[email protected]')
# User.objects.create_user()
return HttpResponser('ok')
另外还有修改密码的方法
def modify(request):
if request.method=='GEt':
return render(request,'modify.html')
else:
old_pwd =request.POST.get('oldboy')
new_pwd=request.POST.get('newpwd')
res =request.user.check_password(oldboy)
if res:
reques.user.set_passwod(new_pwd)
request.user.save()
return HttpREsponse('ok')
from django.contrib import auth
def authlogin(request):
if request.meth=='GET':
return render(request,"authlogin.html")
else:
username=request.POST.get('username')
password =request.POST.get('password')
myuser =auth.authenticate(request,username=username,password=password)
print(myuser)#返回的是用户名
if myuser:
###设置session 和cookie
#request.session['name']=username session可以做
auth.login(request,myuser) #调用成功会产生一个user对象,这个对象可以在任意的视图函数中调用
#自动设置session 存放在django_session
return Httpresponse('ok')
else:
return render(request,'authlogin.html')
两种验证方式###
1.提供了一个验证装饰器
from django.contrib.auth.decorators import login_requires
@login_requires(login_url='/authlogin/')
def tesst1(request):
return HttpResponse('ok')
2.
#任意调用这个user,可以通过调用user.is_authenticated判断用户是否登录
def test(request):
if request.user.is_authenticated:
#业务逻辑处理函数
return Httpresponse('ok')
else:
return render(requst,'authlogin.html')
若要所有的视图函数都要装饰并跳转到login页面,那我需要写好几份
在配置文件中指定auth校验登录登陆不合法同意跳转某个路径
LOGIN_URl='/login/' 即可以局部设置,也可以全局配置