制作一个静态网站源码/做推广公司
python学习第7天---django框架---视图补充
目录
文章目录
- 1、书籍管理添加登录模块
- 1.1、 新建登录应用-login
- 1.2、 应用注册
- 1.3、 路由配置
- 1.4、 用户模型类
- 1.5、数据迁移
- 1.6、视图
- 1.7、模板
- 1.8、效果展示
- 2、ajax
- 3、登录案例ajax改进
- 3.1、应用login下urls.py添加路由
- 3.2、 应用login下views.py添加视图函数
- 3.3、 项目/templates/login/login-ajax.html
- 3.4、 效果图示
- ***后记*** :
内容
1、书籍管理添加登录模块
在之前视图讲解项目-书籍管理系统中,进一步添加登录应用。
1.1、 新建登录应用-login
-
命令:在命令行切换到项目book_manage_system目录下
python manage.py startapp login
1.2、 应用注册
-
项目下settings.py:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','book', # book应用'login', # 登录应用]
1.3、 路由配置
-
项目下urls.py:
urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^book/', include('book.urls')),url(r'^login/', include('login.urls')),url(r'^', include('login.urls')),]
-
login应用下的urls.py:
from django.conf.urls import urlfrom login import viewsurlpatterns = [# 通过url函数设置url路要配置项url(r'^index$', views.index),url(r'^login$', views.login),url(r'^register$', views.register),url(r'^', views.index), # 默认]
1.4、 用户模型类
-
login应用下models.py:
from django.db import models# Create your models here.class User(models.Model):"""用户模型类"""username = models.CharField(max_length=20)password = models.CharField(max_length=32)class Meta:db_table = 'login_user'
1.5、数据迁移
-
命令
python manage.py makemigrationspython manage.py migrate
1.6、视图
-
login应用下的views.py:
from django.shortcuts import renderfrom django.http import HttpResponsefrom login.models import User# Create your views here.def index(request):"""书籍管理登录首页"""return render(request, 'public/index.html')def login(request):"""用户登录"""# 1、判断请求方法if request.method == "GET":return render(request, 'login/login.html')# 2、获取表单数据username = request.POST.get('username')password = request.POST.get('password')# 3、用户名和密码校验try:user = User.objects.get(username=username)except Exception:# 3.1、用户名不匹配return render(request, 'login/login.html')else:if user.password != password:# 3.2、密码不匹配return render(request, 'login/login.html')# 4、验证通过,进入书籍管理首页return render(request, 'book/index.html')def register(request):"""用户注册"""# 1、判断请求方法if request.method == 'GET':# 1.1、如果是GET方法返回注册页面return render(request, 'login/register.html')# 1.2、如果是POST方法,获取表单数据username = request.POST.get('username')password = request.POST.get('password')# 3、用户名校验try:user = User.objects.get(username=username)except Exception:# 3.2、校验通过# 3.2.1、用户表添加新用户new_user = User()new_user.username = usernamenew_user.password = passwordnew_user.save()# 3.2.2、跳转登录页面return render(request, 'login/login.html')else:if user:# 3.1、校验不通过,返回注册页面return render(request, 'login/register.html')
1.7、模板
-
项目/templates/public
-
公用首页:index.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>.book {width: 200px;height: 100px;margin: 0 auto;}li {color: green;}</style></head><body><div class="book"><h3 style="color: orange">书籍管理用户登录</h3><hr><a href="http://127.0.0.1:8000/login/login">登录</a><a href="http://127.0.0.1:8000/login/register">注册</a></div></body></html>
-
-
项目/templates/login:
-
login.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>.login {width: 300px;height: 200px;border: 1px solid black;margin: 100px auto;text-align: center;}</style></head><body><div class="login"><h3>书籍管理用户登录</h3><hr><form action="/login/login" method="post">用户名:<input type="text" name="username" placeholder="请输入用户名"><br>密 码:<input type="password" name="password" placeholder="请输入密码"><br><input type="submit" value="登录"></form></div></body></html>
-
-
register.html:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>.login {width: 300px;height: 200px;border: 1px solid black;margin: 100px auto;text-align: center;}</style></head><body><div class="login"><h3>书籍管理用户注册</h3><hr><form action="/login/register" method="post">用户名:<input type="text" name="username" placeholder="请输入用户名"><br>密 码:<input type="password" name="password" placeholder="请输入密码"><br><input type="submit" value="注册"><br></form></div></body></html>
1.8、效果展示
-
项目结构:
-
首页:
-
注册:
-
登录:
-
数据表:
2、ajax
ajax知识,这里不再详述,给出参考地址:
- w3cschool:https://www.w3school.com.cn/ajax/index.asp
- csdn博客:https://blog.csdn.net/Ha_Girl/article/details/90710491
- cnblogs:https://www.cnblogs.com/zhangruisoldier/p/8006099.html
3、登录案例ajax改进
后端页面跳转的话,前端页面会整个页面刷新,造成资源浪费,用户体验差。AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
3.1、应用login下urls.py添加路由
url(r'^login_ajax$', views.login_ajax),
3.2、 应用login下views.py添加视图函数
def login_ajax(request):"""用户登录"""# print(request)# 1、判断请求方法if request.method == "GET":return render(request, 'login/login-ajax.html')# 2、获取表单数据username = request.POST.get('username')password = request.POST.get('password')# 3、用户名和密码校验try:user = User.objects.get(username=username)except Exception:# 3.1、用户名不匹配return JsonResponse({'res': 0})else:if user.password != password:# 3.2、密码不匹配return JsonResponse({'res': 0})# 4、验证通过,进入书籍管理首页return JsonResponse({'res': 1})
3.3、 项目/templates/login/login-ajax.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script src="/static/public/js/jquery.min.js"></script><style>.login {width: 300px;height: 200px;border: 1px solid black;margin: 100px auto;text-align: center;}#errorMsg {display: none;color: red;}</style><script>$(function () {$('#btnLogin').click(function () {// 1、获取用户名和密码let username = $('#username').val();let password = $('#password').val();// 2、发起ajax请求$.ajax({'url': '/login_ajax','type': 'POST','data': {'username': username, 'password': password},'dataType': 'json',success: function (data) {// console.log(data)if (data.res === 0) {$('#errorMsg').show().html('用户名或者密码错误');} else {location.href = '/book/index';}},error: function (data) {console.log(data)}});});});</script></head><body><div class="login"><h3>书籍管理用户登录</h3><hr>用户名:<input type="text" id="username" name="username" placeholder="请输入用户名"><br>密 码:<input type="password" id="password" name="password" placeholder="请输入密码"><br><input type="button" id="btnLogin" value="登录"><br><div id="errorMsg"></div></div></body></html>
3.4、 效果图示
-
失败:
-
成功:
后记 :
本项目为参考某音python系列视频。上面为自己参考写的学习笔记,持续更新。欢迎交流,本人QQ:806797785
- 原视频地址:https://space.bilibili.com/277754748?spm_id_from=333.788.b_765f7570696e666f.1
- 笔记项目源代码地址:https://gitee.com/gaogzhen/python