自关联,authlogin

自关联

- 自关联
			- 多对多关联
				
				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='123@qq.com')
       # 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/' 即可以局部设置,也可以全局配置
posted @ 2019-08-19 08:37  enazede  阅读(502)  评论(0编辑  收藏  举报