zoukankan      html  css  js  c++  java
  • 自关联,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/' 即可以局部设置,也可以全局配置
    
  • 相关阅读:
    zabbix执行远程命令
    zabbix监控主从同步
    s3fs+minio模拟挂载S3服务器到本地服务器
    PHP编译报错
    ldd可执行程序时返回not a dynamic executable
    Windows nessus安装
    Django数据库,在原有表中添加新字段
    docker安装fastdfs与java客户端测试
    Docker安装与启动
    2018HBCPC
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11375141.html
Copyright © 2011-2022 走看看