Django实战项目-学习任务系统-用户登录

第一步:先创建一个Django应用程序框架代码

1,先创建一个Django项目

django-admin startproject mysite将创建一个目录,其布局如下:mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py

2,再创建一个Django应用

python manage.py startapp study_system将创建一个目录,其布局如下:study_systemstudy_system/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py详情操作参考《编写你的第一个 Django 应用程序》相关文章。
https://mp.weixin.qq.com/s?__biz=Mzg2NDk2MTY3OA==&mid=2247483730&idx=1&sn=0cab44a659067ad145f55a2553c25f4e&chksm=ce6014b3f9179da5b4cf08d43fc13819d2941c7287b234b99beb3722a29e7b863df62e2bbf97&token=737388&lang=zh_CN#rd 

 

第二步:编写第一个功能-用户登录

1,数据库设置
修改 settings.py 配置信息,采用mysql数据库
文件目录结构:
./mysite/mysite/settings.py

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'world',"USER": "root","PASSWORD": "123456","HOST": "127.0.0.1","PORT": "3306","OPTIONS": {"init_command": "SET default_storage_engine=INNODB", },}
}

 

2,创建模型

编辑模型文件:
./mysite/study_system/models.py

from django.db import modelsclass StudyUser(models.Model):user_id = models.AutoField(primary_key=True, verbose_name='用户ID')username = models.CharField(max_length=50, verbose_name='用户名')password = models.CharField(max_length=50, verbose_name='密码')email = models.EmailField(max_length=100, verbose_name='邮箱')phone_num = models.CharField(max_length=20, verbose_name='手机号码')role = models.IntegerField(verbose_name='角色', choices=((1, '系统管理员'), (2, '辅导员'), (3, '学生')))parent_id = models.IntegerField(verbose_name='辅导员用户ID', null=False)created_time = models.DateTimeField(verbose_name='创建时间')update_time = models.DateTimeField(verbose_name='更新时间')class Meta:verbose_name = '学习用户表'verbose_name_plural = '学习用户表'# 用于模型的数据库表的名称db_table = "study_users"


3,激活模型

3.1. 修改 settings.py 配置信息:
./mysite/mysite/settings.py

INSTALLED_APPS = ["study_system.apps.StudySystemConfig", #添加的应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]


3.2. 运行 makemigrations 命令(记得进入 manage.py 所在目录):
$ python manage.py makemigrations study_system

生成如下文件:
./mysite/study_system/migrations/0001_initial.py

3.3. 再运行 sqlmigrate 命令(记得进入 manage.py 所在目录):
sqlmigrate 命令采用迁移名称并返回其模型建表SQL语句:
$ python manage.py sqlmigrate study_system 0001

3.4. 最后再运行 migrate 命令(记得进入 manage.py 所在目录):
$ python manage.py migrate
实现在数据库中创建这些模型表结构。


4,编写用户登录视图

4.1. 编辑视图代码:
./mysite/study_system/views.py

# 登录首页视图
def index(request):context = {}return render(request, "study_system/index.html", context)# 通用视图模型,FormView , 表单视图
class LoginView(FormView):template_name = 'study_system/index.html'form_class = LoginForm# 设置成功登录后的重定向URL# success_url = 'home/'success_url = reverse_lazy('study_system:home')  # 修改为完整的 URL# 登录表单校验def form_valid(self, form):username = form.cleaned_data['username']password = form.cleaned_data['password']# 内置用户权限认证方法,不管用# user = authenticate(username=username, password=password)user = self.validate_user(username, password)if user:# 设置 sessionself.request.session['username'] = usernameself.request.session['role'] = user.role'''在登录视图类中,当用户通过验证并且认证成功时,调用 super().form_valid(form) 方法会触发 Django 的默认行为,其中包括登录用户并将登录状态信息与请求相关联。这样,request.user 对象将被设置为已认证的用户,并且 request.user.is_authenticated 将返回 True。'''return super().form_valid(form)else:return self.render_to_response(self.get_context_data(form=form, error_message='用户或密码不匹配,登录失败.'))# 校验用户密码是否存在def validate_user(self, username, password):try:# 根据用户名和密码查询用户user = StudyUser.objects.get(username=username, password=password)# print('根据用户名和密码查询用户:'+str(user))return userexcept StudyUser.DoesNotExist:return None# 登录成功主页视图
def home(request):# 响应容器rsp_dict = {}# 获取当前用户名username = request.session.get('username')# 根据用户名获取用户对象cur_user = StudyUser.objects.get(username=username)print('根据用户名查询用户对象:' + str(cur_user))# print('session : '+str(username))rsp_dict['username'] = usernametemplate_name = "study_system/home.html"return render(request, template_name, rsp_dict)


4.2. 编辑表单验证代码:
./mysite/study_system/forms.py

from django import forms# 登录用户表单验证
class LoginForm(forms.Form):username = forms.CharField(max_length=100)password = forms.CharField(widget=forms.PasswordInput)


4.3. 编辑页面模板代码:

4.3.1. 网站首页登录页面
./mysite/study_system/templates/study_system/index.html

<!DOCTYPE html>
<html>
<head>{#    让网页自动适应PC端和移动端#}<meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">{#    viewport是view portion的意思,用汉语说,就是“可见区域“。所以这个标签是在定义可见区域的规则。#}{#    width=device-width的意思是”宽度自动适配设备屏幕宽度"#}{#    inital-scale=1.0的意思是“宽度默认为设备屏幕的宽度”。#}<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>study system</title><link rel="stylesheet" href="/static/study_system/bootstrap3/css/bootstrap.min.css">{#    让网页自动适应PC端和移动端#}<style>.container {max-width: 400px;margin: 0 auto;padding-top: 100px;}</style>
</head>
<body><div class="container"><h1 class="text-center">study system</h1><form method="post" action="{% url 'study_system:login' %}">{% csrf_token %}{#        在Django中提交数据到后端服务的时候,为了安全,要使用CSRF(跨站请求伪造)。#}{#        跨站请求伪造的问题在于,服务器信任来自客户端的数据。#}{#        常规的做法是在template模板HTML文件中的form表单 中添加 {% csrf_token %} 可以实现安全提交。#}{#        当我们使用from表单标签来发送请求时,如果需要csrftoken认证,那么必须将它写到我们的form表单标签里面,里面的任意位置。#}{#        生成的隐藏标签为:#}{#        <input type="hidden" name="csrfmiddlewaretoken" value="WVHKQeAuMS4RGqyLybryIBAfacDa1Dp7PEaB3Badv3y0fvLqydX36xAVen6z3oS4">#}<div class="form-group"><input type="text" class="form-control" id="username" name="username" placeholder="username"></div><div class="form-group"><input type="password" class="form-control" id="password" name="password" placeholder="password"></div><div class="form-group"><button type="submit" class="form-control btn-primary">登录账号</button></div><div class="form-group"><a href="{% url 'study_system:register' %}" class="form-control btn-link text-right">注册账户</a></div><!-- 在 body 标签中添加一个隐藏的弹框 --><div class="form-group" id="errorModal" style="display: none;"><p id="alert" class="alert alert-warning">{{ error_message }}</p></div></form>
</div><script src="/static/study_system/jquery1.3.3/jquery.min.js"></script><!-- 在登录页面的合适位置调用弹框 -->
{% if error_message %}<script>$(document).ready(function () {// 设置错误消息内容$("#alert").text("{{ error_message }}");// 显示弹框$("#errorModal").show();});</script>
{% endif %}
</body>
</html>

4.3.2. 网站登录成功用户主页面
./mysite/study_system/templates/study_system/home.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>study system</title><script src="/static/study_system/jquery1.3.3/jquery.min.js"></script><link rel="stylesheet" href="/static/study_system/bootstrap3/css/bootstrap.min.css"><style type="text/css">.content_html {width: 100%;height: auto;margin: 0.2em auto 0.2em auto;border: 0.1em solid #68FE61;}</style>
</head>
<body>
<div>{% include "study_system/common/head.html" %}<div class="content_html">主内容区域</div>
</div>
</body>

4.3.3. 网站登录成功用户菜单页面
./mysite/study_system/templates/study_system/common/head.html

<div><!-- 头部logo区 --><div align="center"><a href="/study_system/home/">study system</a></div><!-- 头部菜单区 -->{#两端对齐的导航元素#}<ul class="nav nav-pills nav-justified"><li class="menu-head"><a href="#">任务管理</a></li><li class="menu-head"><a href="#">定时任务管理</a></li><li class="menu-head"><a href="#">兑换物品管理</a></li><li class="menu-head"><a href="#">用户管理</a></li><li class="menu-head"><a href="#"><strong>欢迎: {{ request.session.username }}</strong> 退出</a></li></ul>
</div>

4.4. 编辑应用 urls 配置代码:
./mysite/study_system/urls.py

from django.urls import path
from . import views
from .views import LoginViewapp_name = 'study_system'urlpatterns = [# 登录注册首页urlpath('', views.index, name='index'),path('login/', LoginView.as_view(), name='login'),path('home/', views.home, name='home'),
]


4.5. 编辑项目 urls 配置代码:
./mysite/mysite/urls.py

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path("study_system/", include("study_system.urls")),    # 应用urlspath('admin/', admin.site.urls),    # admin后台管理 urls
]

第三步:运行测试-用户登录功能

 -------------------------------------------------------------end -------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/127033.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyqt5使用经验总结

pyqt5环境配置注意&#xff1a; 安装pyqt5 pip install PyQt5 pyqt5-tools 环境变量-创建变量名&#xff1a; 健名&#xff1a;QT_QPA_PLATFORM_PLUGIN_PATH 值为&#xff1a;Lib\site-packages\PyQt5\Qt\plugins pyqt5经验2&#xff1a; 使用designer.exe进行设计&#xff1…

网络爬虫指南

一、定义 网络爬虫&#xff0c;是按照一定规则&#xff0c;自动抓取网页信息。爬虫的本质是模拟浏览器打开网页&#xff0c;从网页中获取我们想要的那部分数据。 二、Python为什么适合爬虫 Python相比与其他编程语言&#xff0c;如java&#xff0c;c#&#xff0c;C&#xff…

通过融合UGV的地图信息和IMU的惯性测量数据,实现对车辆精确位置和运动状态的估计和跟踪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华硕平板k013me176cx线刷方法

1.下载adb刷机工具, 或者刷机精灵 2.下载刷机rom包 华硕asus k013 me176cx rom固件刷机包-CSDN博客 3.平板进入刷机界面 进入方法参考&#xff1a; ASUS (k013) ME176CX不进入系统恢复出厂设置的方法-CSDN博客 4.解压ME176C-CN-3_2_23_182.zip&#xff0c;把UL-K013-CN-3.2.…

(Note)机器学习面试题

机器学习 1.两位同事从上海出发前往深圳出差&#xff0c;他们在不同时间出发&#xff0c;搭乘的交通工具也不同&#xff0c;能准确描述两者“上海到深圳”距离差别的是&#xff1a; A.欧式距离 B.余弦距离 C.曼哈顿距离 D.切比雪夫距离 S:D 1. 欧几里得距离 计算公式&#x…

最新 SpringCloud微服务技术栈实战教程 微服务保护 分布式事务 课后练习等

SpringCloud微服务技术栈实战教程&#xff0c;涵盖springcloud微服务架构Nacos配置中心分布式服务等 SpringCloud及SpringCloudAlibaba是目前最流行的微服务技术栈。但大家学习起来的感受就是组件很多&#xff0c;不知道该如何应用。这套《微服务实战课》从一个单体项目入手&am…

CUDA+cuDNN+TensorRT 配置避坑指南

深度学习模型加速部署的环境配置&#xff0c;需要在本地安装NVIDIA的一些工具链和软件包&#xff0c;这是一个些许繁琐的过程&#xff0c;而且一步错&#xff0c;步步错。笔者将会根据自己的经验来提供建议&#xff0c;减少踩坑几率。当然可以完全按照官方教程操作&#xff0c;…

基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

软件工程与计算总结(四)项目管理基础

目录 一.项目和项目管理 二.团队组织与管理 三.软件质量保障 四.软件配置管理 五.项目实践 一.项目和项目管理 1.软件开发远不是纯粹的编程&#xff0c;随着软件规模的增长&#xff0c;软件开发活动也变得越来越复杂~ 2.软件项目就是要将所有的软件开发活动组织起来&#…

什么是内容运营?

关于内容运营&#xff0c;在不同种类的公司&#xff0c;侧重点也不一样。 电商平台的内容运营岗更偏内容营销&#xff1b;产品功能比较简单的公司&#xff0c;内容运营和新媒体运营的岗位职责差不多&#xff1b;而内容平台的内容运营更多的是做内容的管理和资源整合。

windows内核编程(2021年出版)笔记

1. Windows内部概览 1.1 进程 进程包含以下内容&#xff1a; 可执行程序&#xff0c;代码和数据私有的虚拟地址空间&#xff0c;分配内存时从这里分配主令牌&#xff0c;保存进程默认安全上下文&#xff0c;进程中的线程执行代码时会用到它私有句柄表&#xff0c;保存进程运…

C语言内存函数

目录 memcpy(Copy block of memory)使用和模拟实现memcpy的模拟实现 memmove(Move block of memory)使用和模拟实现memmove的模拟实现: memset(Fill block of memory)函数的使用扩展 memcmp(Compare two blocks of memory)函数的使用 感谢各位大佬对我的支持,如果我的文章对你有…