Django 08.17

1.模型:

自关联

  • 多对多关联

    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')
        
    def test(request):
    
        ### 自关联
        '''
        from_user_id : 男生的id
        to_user_id: 女生id
        '''
        #### 查询和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)
    
    
        return HttpResponse('ok')
    
  • 一对多关联django_admin_log

    class article(models.Model):
        title = models.TextField()
    
    class Comment(models.Model):
        content = models.CharField(max_length=255)
        article = models.ForeignKey("article")
        reply = models.ForeignKey("Comment",default=0)
    

auth模块:

django内置的模块

auth_user表记录的添加

  • 创建超级用户(不可手动插入,因为密码是加密的)
  • 简单使用auth认证
from django.contrib import auth
def login(request):
  if request.method == 'POST':
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    user = auth.authenticate(request,username=name,password=pwd)
    # 类似于user=models.User.objects.filter(username=name,password=pwd).first()
    if user:
      return redirect('/home/')
  return render(request,'login.html')
def test1(request):
    if request.user.is_authenticated:
        return HttpResponse("OK")
    else:
        return render(request,"login.html")
from django.contrib.auth.decorators import login_required
@login_required()
def test1(request):
    return HttpResponse("OK")

# 可以在配置文件中指定auth校验登陆不合法统一跳转到某个路径
LOGIN_URL = '/login/'  # 既可以局部配置,也可以全局配置
### auth 模块注册
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')
        pwd = request.POST.get('pwd')

        # User.objects.create_superuser(username=username, password=pwd, email='111@qq.com')
        User.objects.create_user(username=username, password=pwd)
    return HttpResponse('ok')
  • 注销

    auth.logout(request)
    # 等价于删除session数据
    request.session.flush()
    
  • 校验密码,修改密码

    ### 修改密码
    def modify(request):
    
        if request.method=='GET':
    
            return render(request, 'modify.html')
        else:
            old_pwd = request.POST.get('oldpwd')
            new_pwd = request.POST.get('newpwd')
    
            res = request.user.check_password(old_pwd)
            if res:
                request.user.set_password(new_pwd)
                request.user.save()
                return HttpResponse('ok')
            else:
                return render(request, 'modify.html')
    

自定义模型表应用auth功能

如何扩张auth_user表?

  • 一对一关联(不推荐)

    from django.contrib.auth.models import User
    
    class UserDetail(models.Models):
      phone = models.CharField(max_length=11)
      user = models.OnoToOneField(to=User)
    
  • 面向对象的继承

    from django.contrib.auth.models import User,AbstractUser
    class UserInfo(AbstractUser):
      phone = models.CharField(max_length=32)
    
    # 需要在配置文件中,指定我不再使用默认的auth_user表而是使用我自己创建的Userinfo表
    AUTH_USER_MODEL = "app名.models里面对应的模型表名"
    """
    自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。
    库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现
    """
    

layUI的使用:

posted @ 2019-08-19 15:44  海森t  阅读(31)  评论(0)    收藏  举报