注册
创建注册的模板---HTML文件
1.在templates文件下创建register.html
2.在模板里写注册的样式表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{% csrf_token %}
<h1>注册页面</h1>
账号:<input type="text" name="rname"><br/><br/>
密码:<input type="password" name="rpasswd"><br/><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
综合内容如上,具体解析如下
- 想要实现表单中的内容,必须要写<form></form>表单标签
- 在form标签里写method="post" 是指定发送请求的方式 post请求更安全
- {% csrf_token %}是防止跨站攻击 如果写表单,必须要写这个
- name="rname"是为了获取表单中输入的数据,存入数据库
给注册页面写视图渲染 用类视图写
在子应用的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):
rname = request.POST.get("rname")
rpasswd = request.POST.get("rpasswd")
# 注册成功跳转到到登录页面,注册加判断已经存在提示改用用户已存在
users = Users.objects.all()
for i in users:
if rname == i.name:
return HttpResponse("用户已存在")
try:
Users.objects.create(name=rname, password=rpasswd)
except Exception as e:
print(e)
return HttpResponse("注册失败")
return redirect('/login/')
综合内容如上,具体解析如下
- 因为是类视图,所以要继承View,在这之前先导包from django.views import View
- get请求方法是为了渲染register.html文件,利用render方法渲染,必须带参数request
- 因为post请求方法安全,所以在这里往数据库里存数据
- 在类视图里获取表单中的数据rname=request.POST.get("rname") 引号里的rname是获取表单中的数据,然后用一个新的变量名rname来接收
- users = Users.objects.all() 获取数据库的全部数据,然后循环每一条数据,如果表单数据用户名 == 数据库中的用户名,则提示用户已经存在
- 用万能异常形式写 except Exception as e: 是把捕获到的异常存到变量e里
- 成功的话存到数据库里Users.objects.create(**name=**rname, **password=**rpasswd),加粗的部分是数据库里对应的字段
- 注册成功,用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.在模板里写登录的样式表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{% csrf_token %}
<h1>登录页面</h1>
账号:<input type="text" name="lname"><br/><br/>
密码:<input type="password" name="lpasswd"><br/><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
综合内容如上,具体解析如下
- 想要实现表单中的内容,必须要写<form></form>表单标签
- 在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()),
]
版权归原作者 浅的博客 所有, 如有侵权,请联系我们删除。