1. 总体设计思路

一套简单的用户管理系统,包含但不限如下功能:

  • 用户增加:用于新建用户;
  • 用户查询:用于查询用户信息;
  • 用户修改:用于修改用户信息;
  • 用户删除:用于删除用户信息;

最基本的功能就包括增、删、改、查了。

想要搭建好一套系统,前期肯定是要设计一套思路,大家按照上图对号入座即可。

下面,咋就开始实战了...

划重点了一定要动手一定要动手一定要动手 ...

2. 搭建简易用户系统

如果哪位同学还没学习过上两篇文章的,请速速去研究下,再来看这篇文章。

2.1 配置模型Model

hello\models.py

创建一个类(class)对象,这就相当于数据中的一张表(table)。

# 创建数据库User表
class User(models.Model):
# 性别, 元组用于下拉框
sex = ((0, '男'), (1, '女'))
# 用户名
username = models.CharField(max_length=20, help_text='用户名')
# 用户密码
password = models.CharField(max_length=16, help_text='用户密码')
# sex中的0,1是存放在数据库,中文男和女是在web前端展示
sex = models.IntegerField(choices=sex, null=True, blank=True)
# 手机号码
phone = models.CharField(max_length=11, help_text='手机号码') # 对象获取返回值为用户名
def __str__(self):
return self.username

2. 2 写入数据库:

后台会转换成sql语句写入数据库,看起来是不是很方便,也不用太懂sql了,这也是ORM 的强大之处。

(py369) [root@localhost devops]# python manage.py makemigrations hello
Migrations for 'hello':
hello/migrations/0005_auto_20201105_2336.py
- Create model User
- Alter field id on devices
(py369) [root@localhost devops]# python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, hello, sessions
Running migrations:
Applying hello.0005_auto_20201105_2336... OK

2.3 数据库验证表:

我是通过Navicat Premium工具连接数据库,进行可视化查看,你用哪个工具都可以。

2.4 路由URL配置:

hello\urls.py

name='xxxx',这是命名空间的用法,常在模板使用此方式:hello:adduser,等同于hello/adduser.html, 好处就是不用担心你的path随意改变。

from django.urls import path
from django.urls import re_path
from hello import view app_name = 'hello'
urlpatterns = [
# FBV,通过函数方式,实现增删改查
# 增加
path('adduser/', view.adduser, name="adduser"),
# 查询
path('showuser/', view.showuser, name="showuser"),
# 修改
re_path('edituser/(?P<pk>[0-9]+)?/', view.edituser, name="edituser"),
# 删除
re_path('deluser/(?P<pk>[0-9]+)?/', view.deluser, name="deluser"),
]

2.5 用户增加

后台执行脚本配置:

hello\view.py

from django.shortcuts import render
from django.http import HttpResponse, QueryDict
from django.shortcuts import get_object_or_404
from django.http import Http404
from hello.models import User
import traceback # 用户增加函数
def adduser(request):
msg = {}
if request.method == 'POST':
try:
print(request.POST)
# 将数据转为字典格式
data = request.POST.dict()
# 将数据一次性写入数据库
User.objects.create(**data)
msg = {'code':0, 'result':'已成功添加用户.'}
except:
msg = {'code':1, 'result':'添加用户失败:'.format(traceback.format_exc())}
return render(request, "hello/adduser.html", {'msg':msg})

视图模板配置:

templates\hello\adduser.html

<!--继承母版-->
{% extends "base.html" %}
<!--重写title的内容-->
{% block title %} 用户添加 {% endblock %}
<!--重写body的内容-->
{% block body %} <!--显示成功或失败的信息-->
{% if msg.code == 0 %}
<p style="color: green"> {{ msg.result }}</p>
{% else %}
<p style="color: red"> {{ msg.result }}</p>
{% endif%} <div class="container">
<h2 style="color: #666666">添加用户信息</h2><br>
<!-- 表单-->
<form method="post" action="">
用户:
<input type="text" name="username">
<br><br>
密码:
<input type="password" name="password">
<br><br>
手机号:
<input type="text" minlength="11" maxlength="11" name="phone">
<br><br>
性别:
<input type="radio" name="sex" value="0" checked>男
<input type="radio" name="sex" value="1" checked>女
<br><br>
<button type="submit">提交</button>
<button type="reset">重置</button>
</form>
</div>
{% endblock%}

前端展示效果如下:

打开浏览器,输入如下链接格式:http://ip/hello/adduser

用户提交,后台数据库验证:

认真填写好信息后,点击提交,成功的话就会显示已成功添加用户,另外可以到后台DB去验证下。

我一口气创建了6个用户,我任性。

备注:各位先忽略数据库表中密码是明文,后续实战中会是密文的,不用担心密码泄漏。

2.6 用户查询

后台执行脚本配置:

hello\view.py

# 新增代码块
# 用户查看函数
def showuser(request):
# http://192.168.8.130:8888/hello/showuser/?keyword=test001
# 获取关键位置参数,get获取唯一值,''表示缺省参数,防止报错
keyword = request.GET.get('keyword', '')
# 获取所有数据
users = User.objects.all()
# 如果关键位置参数不为空
if keyword:
# 用户名不区分大小写过滤
users = users.filter(username__icontains=keyword)
# return 返回两个参数'users'和'keyword'传到前端
return render(request, 'hello/showuser.html', {'users':users, 'keyword':keyword})

视图模板配置:

templates\hello\showuser.html

<!--继承母版-->
{% extends "base.html" %}
<!--重写title的内容-->
{% block title %} 用户查询 {% endblock %}
<!--重写body的内容-->
{% block body %}
<div class="container">
<h2 style="color: #666666">查询用户信息</h2><br>
<!--搜索框-->
<!-- action重定向到http://ip/hello/showuser,showuser是命名空间name-->
<!-- 'hello:showuser' 等同于 http://ip/hello/showuser/ -->
<!-- name='keyword' 表示 http://ip/hello/showuser/?keyword='test001'中的keyword参数-->
<!-- value 表示在文本框中显示-->
<form action="{% url 'hello:showuser' %}">
<input type="text" name="keyword" value="{{ keyword }}" placeholder="请输入想要查询的信息">
<button type="submit"> 搜索 </button>
</form> <!--表格-->
<table border="1">
<thead>
<tr>
<th> ID </th>
<th> 用户名 </th>
<th> 密码 </th>
<th> 手机号码 </th>
<th> 性别 </th>
<th> 操作 </th>
</tr>
</thead>
<br>
<tbody>
{% for user in users %}
<tr>
<td> {{ user.id }} </td>
<td> {{ user.username }} </td>
<td> {{ user.password }} </td>
<td> {{ user.phone }} </td>
<td> {% if user.sex == 0 %}男 {% elif user.sex == 1 %}女 {% else %}none {% endif %} </td>
<td>
<a href="{% url 'hello:edituser' user.id %}"> 更新 </a>
<a href="{% url 'hello:deluser' user.id %}"> 删除 </a>
<!-- 等同于如下,但不推荐此方式:-->
<!-- <a href="/hello/edituser/{{user.id}}/"> 更新 </a>-->
<!-- <a href="/hello/deluser/{{user.id}}/"> 删除 </a>-->
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock%}

前端展示效果如下:

查询用户,展示如下:

此时后台是通过username来过滤,后期我们会通过Q方法来过滤多个字段。

2.7 用户修改

后台执行脚本配置:

hello/view.py

重点说明: 不管是用户查询还是删除,重点以ID (数据库中的主键)进行操作,不要使用其他字段。

# 新增代码,用户修改函数
def edituser(request, **kwargs):
msg = {}
pk = kwargs.get('pk', '')
# 先检查pk是否存在,不存在则报404错误
user = get_object_or_404(User, pk=pk)
if request.method == 'POST':
try:
data = request.POST.dict()
User.objects.filter(pk=pk).update(**data)
msg = {'code':0, 'result':'已成功更新用户'}
except:
msg = {'code':1, 'result':'用户更新失败: '.format(traceback.format_exc())} return render(request, 'hello/edituser.html', {'user':user, 'msg':msg})

视图模板配置

templates\hello\edituser.html

<!--继承母版-->
{% extends "base.html" %}
<!--重写title的内容-->
{% block title %} 更新用户 {% endblock %}
<!--重写body的内容-->
{% block body %} <!--显示成功或失败的信息-->
{% if msg.code == 0 %}
<p style="color: green"> {{ msg.result }}</p>
{% else %}
<p style="color: red"> {{ msg.result }}</p>
{% endif %} <div class="container">
<h2 style="color: #666666">更新用户信息</h2><br> <form method="post" action="">
用户名:
<input type="text" name="username" value="{{ user.username }}">
<br>
<br>
密码:
<input type="password" name="password" value="{{ user.password }}">
<br>
<br>
手机号码:
<input type="text" name="phone" value="{{ user.phone }}">
<br>
<br>
性别:
{% if user.sex == 0 %}
<input type="radio" name="sex" value="0" checked>男
<input type="radio" name="sex" value="1">女
{% else %}
<input type="radio" name="sex" value="0" >男
<input type="radio" name="sex" value="0" checked>女
{% endif %}
<br>
<br>
<button type="submit"> 提交 </button>
<button> <a href="{% url 'hello:showuser' %}"> 取消 </a></button>
</form>
</div>
{% endblock%}

前端展示效果如下:

在用户列表的操作项,点击更新,跳转该页面:

修改用户,展示如下:

将用户名test006的性别修改为,结果如下:

pk不存在的时候,测试效果如下:

后台数据库查表验证下:

2.8 用户删除

后台执行脚本配置

hello\view.py

# 新增代码, 用户删除函数
def deluser(request, **kwargs):
msg = {}
pk = kwargs.get('pk', '')
try:
# 获取单个用户信息
user = User.objects.get(pk=pk)
except User.DoesNotExist:
# 如果用户不存在,则返回404错误
raise Http404
if request.method == 'POST':
try:
User.objects.get(pk=pk).delete()
msg = {'code':0, 'result':'已成功删除用户'}
except:
msg = {'code': 1, 'result': '用户删除失败: '.format(traceback.format_exc())}
return render(request, 'hello/deluser.html', {'user':user, 'msg':msg})

视图模板配置

templates\hello\deluser.html

<!--继承母版-->
{% extends "base.html" %}
<!--重写title的内容-->
{% block title %} 删除用户信息 {% endblock %}
<!--重写body的内容-->
{% block body %} <!--显示成功或失败的信息-->
{% if msg.code == 0 %}
<p style="color: green"> {{ msg.result }} {{ user.username }} </p>
{% else %}
<p style="color: red"> {{ msg.result }}</p>
{% endif %} <div class="container">
<h2 style="color: #666666">删除用户信息</h2> <h1 style="color: red"> Are you sure to delete {{ user.username }}? </h1> <form method="post" action="">
<button type="submit"> 确定 </button>
<button> <a href="{% url 'hello:showuser' %}"> 取消 </a></button>
</form> </div>
{% endblock%}

删除用户,展示如下:

在用户列表的操作项,点击删除,点击确定,已成功返回`:

删除失败效果如下:

至此,一套简易的用户系统已经完成啦,看起来是不是很简单,大家跟着练习一把,有问题,请随时讨论,谢谢。

如果觉得这篇文章不错,请点赞或分享到朋友圈吧!

如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享

Django之简易用户系统(3)的更多相关文章

  1. django 自定用户系统 以及 Django Model 定义语法

    http://www.tuicool.com/articles/jMzIr2 django使用自己的用户系统 http://www.jianshu.com/p/c10be59aad7a Django ...

  2. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

  3. Redis+Django(Session,Cookie、Cache)的用户系统

    转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一 ...

  4. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  5. Django之路由分发系统

    web的基本工作流程 首先,我们先来思考一下我们平常在上网浏览网页时候的场景,大致就是打开一个web浏览器,输入某一个网站的地址,然后转到该网址,在浏览器中得到该网址的页面.从这个场景中我们可以抽象出 ...

  6. Django 中的用户认证

    Django 自带一个用户认证系统,这个系统处理用户帐户.组.权限和基于 cookie 的 会话.本文说明这个系统是如何工作的. 概览 认证系统由以下部分组成: 用户 权限:控制用户进否可以执行某项任 ...

  7. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

  8. Django写的投票系统2(转)

    在上一篇中 django实例:创建你的第一个应用投票系统(一) 已经介绍基本的功能,并已经启动服务了.这一节介绍数据库相关的东东. 首页打开mysite/settings.py配置文件, 设置数据库打 ...

  9. Django练习——博客系统小试

    在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...

随机推荐

  1. [论文理解] Good Semi-supervised Learning That Requires a Bad GAN

    Good Semi-supervised Learning That Requires a Bad GAN 恢复博客更新,最近没那么忙了,记录一下学习. Intro 本文是一篇稍微偏理论的半监督学习的 ...

  2. 独立看第一个C++程序到最终结果log----2019-04-16

    (如果一个人夸你,千万别相信,一个人真优秀是不需要说出来的,所以别人夸你的时候也是自己最松懈的时候,千万不能飘,只能说明自己不是很差而已,世界上优秀的人很多,一直优秀到最后的人却是凤毛菱角. 如果一个 ...

  3. unsigned int 和 int

    就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是 ...

  4. golang常用库:配置文件解析库-viper使用

    一.viper简介 viper 配置解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 cob ...

  5. CentOS Linux 修改主机名

    一.CentOS5 修改主机名 二.CentOS6 修改主机名 三.CentOS7 修改主机名 静态的(Static hostname)        "静态"主机名也称为内核主机 ...

  6. OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...

  7. 实验五 css进阶应用

    实验五 css进阶应用 实验目的: 掌握CSS在列表中的应用,能利用CSS将列表做成精美的导航栏: 掌握CSS在表单元素中的应用: 掌握SPRY菜单的制作方法和CSS代码修改. 实验内容: 1. 制作 ...

  8. C#数据结构-链栈

    上一篇我们通过数组结构实现了栈结构(准确的说是栈的顺序存储结构),现在我们通过链(单链)存储栈,也就是链栈. 通常对于正向单链表来说,是从头节点开始,在链的尾部附加节点,前一个节点的指针指向附加节点: ...

  9. 《python 网络数据采集》代码更新

    <python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import Beautifu ...

  10. form中的标签例子

    <form action="dreamdu.php" method="post" id="dreamduform"> <f ...