python注册登录修改密码退出_Django中auth登录、注册、修改密码、退出、ORM自关联...

###登录

from django.contrib import auth

user_obj = auth.authenticate(request, username=username, password=pwd)

## authenticate: 主要是从auth——user这张表中查询比较 数据, 返回一个user_obj对象

if user_obj:

####设置session

#### 登陆成功, 开始写session 的操作

### 1. 向客户端写cookiie

### 2. 向session表写session数据

# request.session['username'] = username

# request.session['pwd'] = pwd

auth.login(request, user=user_obj)

作用:

1. 设置cookie, session

2. 生成request.user的对象, 这个对象可以再视图函数中使用

3. request.user这个对象 相当于 request.session

###验证时否登录过 ####方法一 (1) username = request.sesssion.get('username') (2)username = request.user.username (3)request.path #获取url后缀 (4)request.get_full_path() #获取后缀加get请求参数 (1)(2)原理相同 ####方法二

is_login = request.user.is_authenticated() ### 用户是否登录

if is_login:

return HttpResponse('index')

else:

return render(request, "login.html")

####方法三(登录认证装饰器)

from django.contrib.auth.decorators import login_required

@login_required(login_url='/login/')

def index2(request):

return HttpResponse('index2')

####方法四(全局登录认证装饰器)

setting:

LOGIN_URL = '/login/' #需要跳转的页面

代码区:

from django.contrib.auth.decorators import login_required

@login_required

def index3(request):

return HttpResponse('index3')

###注册

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(username=username, password=pwd)

User.objects.create_superuser(username=username, password=pwd, email='111@qq.com')

User.objects.create_user(username=username, password=pwd)

return HttpResponse('successs')

###修改密码

def modify(request):

if request.method == 'GET':

return render(request, 'modify.html')

else:

old_pwd = request.POST.get('old_pwd')

res = request.user.check_password(old_pwd)

if res:

new_pwd = request.POST.get('new_pwd')

request.user.set_password(new_pwd)

request.user.save()

return HttpResponse('ok')

###安全退出

def logout(request):

auth.logout(request)

return HttpResponse('安全退出')

###扩张auth_user表?

- 一对一关联(不推荐)

python

from django.contrib.auth.models import User

class UserDetail(models.Models):

phone = models.CharField(max_length=11)

user = models.OnoToOneField(to=User)

###auth继承

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里面对应的模型表名" ###orm自关联

自己写第三张表

和勾洋约会的女生

res = models.User.objects.filter(name='罗文', gender=1).first()

objs = res.xxx.all()

print(objs)

for obj in objs:

print(obj.g.name)

和蓉蓉约会的男生

res = models.User.objects.filter(name='蓉蓉', gender=2).first()

objs = res.yyy.all()

for obj in objs:

print(obj.b.name)

不写第三张表

我定义的规则:

from_user_id : 男生id

to_user_id : 女生id

和罗文约会的女生

res = models.User.objects.filter(name='罗文', gender=1).first()

objs = res.m.all()

1. seelct * from app01_user_m where from_user_id=2 ## to_user_id:[5,6]

2. select * from app01_user where id in [5,6] #### 所有相亲女生的名字

for obj in objs:

print(obj.name)

和品如约会的男生;

res = models.User.objects.filter(name='品如', gender=2).first()

objs = res.user_set.all()

1. seelct * from app01_user_m where to_user_id=6 ## from_user_id:[1,2]

2. select * from app01_user where id in [1,2]

for obj in objs:

print(obj.name)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值