Django实现注册登录功能

注册

创建注册的模板---HTML文件

1.在templates文件下创建register.html

2.在模板里写注册的样式表单




    
    Title


{% csrf_token %}

注册页面

账号:

密码:

综合内容如上,具体解析如下

  • 想要实现表单中的内容,必须要写
    表单标签
  • 在form标签里写method="post" 是指定发送请求的方式 post请求更安全
  • {% csrf_token %}是防止跨站攻击  如果写表单,必须要写这个
  • name="name"是为了获取表单中输入的数据,存入数据库 

给注册页面写视图渲染 用类视图写

在子应用的views里写视图

from django.shortcuts import render, HttpResponse, redirect
from django.views import View
from myapp.models import Users


# Create your views here.
class RegisterView(View):
    def get(self, request):
        return render(request, "register.html")

    def post(self, request):
        name = request.POST.get("name")
        passwd = request.POST.get("passwd")

        # 注册成功跳转到到登录页面,注册加判断已经存在提示改用用户已存在
        users = Users.objects.all()
        for i in users:
            if name == i.name:
                return HttpResponse("用户已存在")
        try:
            Users.objects.create(name=name, password=passwd)
        except Exception as e:
            return HttpResponse("注册失败")

        return redirect('/login/')

综合内容如上,具体解析如下

  • 因为是类视图,所以要继承View,在这之前先导包from django.views import View
  • get请求方法是为了渲染register.html文件,利用render方法渲染,必须带参数request
  • 因为post请求方法安全,所以在这里往数据库里存数据
  • 在类视图里获取表单中的数据name=request.POST.get("name")   引号里的name是获取表单中的数据,然后用一个新的变量名name来接收   
  • users = Users.objects.all() 获取数据库的全部数据,然后循环每一条数据,如果表单数据用户名 == 数据库中的用户名,则提示用户已经存在
  • 用万能异常形式写 except Exception as e: 是把捕获到的异常存到变量e里
  • 成功的话存到数据库里Users.objects.create(name=name, password=passwd),加粗的部分是数据库里对应的字段
  • 注册成功,用redirect重定向到登录页面  redirect('/login/')

在子路由中给类视图配置路由

from django.urls import path
from myapp import views

urlpatterns = [
    path('register/', views.RegisterView.as_view())
]

综合内容如上,具体解析如下

  • 因为视图是用类的方式写的,所以要在类视图后面写 .as_view()  
  • as_view()是一个方法,不要忘记加括号()

登录 

创建登录的模板---HTML文件

1.在templates文件下创建login.html

2.在模板里写登录的样式表单




    
    Title


{% csrf_token %}

登录页面

账号:

密码:

综合内容如上,具体解析如下

  • 想要实现表单中的内容,必须要写
    表单标签
  • 在form标签里写method="post" 是指定发送请求的方式 post请求更安全
  • {% csrf_token %}是防止跨站攻击  如果写表单,必须要写这个
  • name="lname"是为了获取表单中输入的数据,存入数据库 

给登录页面写视图渲染 用类视图写

在子应用的views里写视图---带详细解释

# 类视图---登录模板
class LoginView(View):
    def get(self, request):
        return render(request, "login.html")

    def post(self, request):
        lname = request.POST.get("lname")
        lpasswd = request.POST.get("lpasswd")

        # 登录失败时需要提示是用户名不存在还是密码错误
        try:  # 存放可能出现异常的代码 查询数据多个条件时默认是并且的关系
            user = Users.objects.get(name=lname)
            # 当输入的用户名在数据库里查询不到,说明try里面的代码存在异常
            # 执行万能异常里面的语句
        except Exception as e:  # 捕获异常将异常存到e里
            print(e)
            return HttpResponse("用户名不存在")

        # 如果用户名对,就判断密码有没有输入正确
        if lpasswd != user.password:
            return HttpResponse("用户名和密码不匹配")

        return redirect('/add/')

 在子路由中给类视图配置路由

from django.urls import path
from myapp import views

urlpatterns = [
    path("login/", views.LoginView.as_view()),
]

你可能感兴趣的:(django,python,后端)