初学django做的注册登录小案列(2)

在models模块中创建用户表

class User(models.Model):
    u_name=models.CharField(max_length=32)
    u_pwd=models.CharField(max_length=32)

    u_token=models.CharField(max_length=258)

配置路由

app中的urls

from app import views

urlpatterns = [
    url(r'^hello/', views.hello),
    url(r'^register/',views.register,name='register'),#注册
    url(r'^index/',views.index,name='index'),#首页
    url(r'^login/',views.login,name='login'),#登陆
]

项目day06的路由

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'app/',include('app.urls',namespace='app'))
]

根据你的路由创建视图函数

1.首先是注册,设置token标识,并为密码加密

#设置token标示
def make_toke():
    uid=str(uuid.uuid4())#可以生成当前网段的唯一标识
    md=hashlib.md5()#哈希加密
    md.update(uid.encode('utf-8'))#utf-8编码
    return uid

#密码加密操作
def make_pwd(pwd):
    #不管是否为字符串,首先转成字符串
    password=str(pwd)
    #哈希对象,需要导包
    md=hashlib.md5()
    #utf-8编码
    md.update(password.encode('utf-8'))
    #已十六进制返回
    return md.hexdigest()

#注册
def register(request):
    #请求方式为get
    if request.method == 'GET':
        return render(request,'register.html')
    #请求方式为post
    else:
        #取出信息
        username=request.POST.get('username')
        pwd=request.POST.get('password')
        users=User.objects.filter(u_name=username)
        #首先判断用户是否存在
        if users.exists():
            return HttpResponse('该用户已存在')
        #不存在添加用户信息
        user=User()
        user.u_name=username
        user.u_pwd=make_pwd(pwd)
        user.u_token=make_toke()#自定义session方法
        user.save()#添加完需要保存到数据库中
        red = HttpResponseRedirect(reverse('app:login'))#重定向操作
        red.set_cookie('token', user.u_token)#设置cookie
        return red#跳转到login页面

2.然后是首页

#首页
def index(request):
    #获取cookie
    token=request.COOKIES.get('token')
    #不存在返回登录页面
    if not token:
        return render(request,'login.html')
    #存在就比对信息一致后返回首页
    user=User.objects.get(u_token=token)
    return render(request,'index.html',context={'user':user})
3.登录(差点打成登陆。。。)

#登录
def login(request):
    if request.method=='GET':
        return render(request,'login.html')
    else:
        #获取用户比对信息,密码加密比对
        username=request.POST.get('username')
        pwd=request.POST.get('password')
        users=User.objects.filter(u_name=username)
        pwd2=make_pwd(pwd)
        pwd1=User.objects.filter(u_pwd=pwd2)
        #用户唯一,直接取第一个
        user=users.first()
        #不存在返回注册页面
        if not users.exists():
            return render(request,'register.html')
        else:
            #存在比对密码,密码不一致重新返回登录页面
            if not pwd1.exists():
                return render(request,'login.html')
            else:
                #一致跳转到首页并设置cookie
                response = redirect(reverse('app:index'))
                response.set_cookie('token', user.u_token)
                return response
 

猜你喜欢

转载自blog.csdn.net/weixin_43788061/article/details/86348468