自关联,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='[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/' 即可以局部设置,也可以全局配置

猜你喜欢

转载自www.cnblogs.com/zhuyuanying123--/p/11375141.html