Django Series(Django2.1.2 + Anaconda3)
(一)安装并配置 Django 环境 ||| 基于 Django 进行 Web 开发
(四)数据的增删改:用户提交数据,验证数据的有效性并传输至后台(jQuery.post、jQuery.getJSON)
(五)基于 "xlsxwriter + BytesIO"(Python3)生成 Excel 报表 ||| Python2 StringIO.StringIO()
说明:本系列教程根据最近实践过程进行整理、总结和分享。由于时间和精力有限,发表时内容分析部分可能不是很完整,后续有时间会慢慢补充。同时!!也希望感兴趣的同学可以提出一些细节问题和建议,我会根据这些问题进一步整理和完善哈。
更新日志:
20181019:发表第一版,主要以代码分享为主;知识点分析较为粗略。
知识点分析:
实现代码:
models.py
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
class BRsystemUser(models.Model):
Users = models.OneToOneField(User, on_delete = models.CASCADE)
UserName = models.CharField(max_length = 20, verbose_name = u'用户ID')
UserPWD = models.CharField(max_length = 20, verbose_name = u'用户密码')
RoleTypeID = models.CharField(max_length = 10, verbose_name = u'用户类型ID') #用户类型:"admin"为管理员, "general"为普通员工
NickName = models.CharField(max_length = 20, verbose_name = u'昵称') #用户真正名字
RegisterTime = models.DateTimeField(auto_now_add = True, verbose_name = u'注册时间')
MobilePhone = models.CharField(max_length = 11, verbose_name = u'手机号码', null = True) #电话号码
Note = models.CharField(default = 'None', max_length = 100, verbose_name = u'备注',null = True)
def __str__(self):
return self.Users.username + ' ' + self.RoleTypeID
urls.py
from django.urls import include, path, re_path
from app_ManageSystem import views
app_name = 'app_ManageSystem'
urlpatterns = [
path(r'Login', views.Login, name='Login'),
path(r'Logout', views.Logout, name='Logout'),
]
views.py
### 系统登录界面
@csrf_exempt
def Login(request):
context = {}
if request.POST:
UserName = request.POST.get('form_UserName')
UserPWD = request.POST.get('form_UserPWD')
print(UserName, UserName)
user = auth.authenticate(username = UserName, password = UserPWD)
if user is not None:
print("{} login successful".format(UserName))
if user.is_active:
auth.login(request, user)
sys_user = BRsystemUser.objects.get(Users = user)
request.session["UserName"] = sys_user.UserName
request.session["UserPWD"] = sys_user.UserPWD
request.session["RoleTypeID"] = sys_user.RoleTypeID
request.session["NickName"] = sys_user.NickName
request.session["MobilePhone"] = sys_user.MobilePhone
request.session["Note"] = sys_user.Note
request.session["log_file_path"] = os.path.join("report", "log", sys_user.UserName + ".txt")
hcq_write(request.session.get('log_file_path'), True, False, "[{}({})] 成功登录系统".format(
sys_user.UserName, sys_user.RoleTypeID))
return HttpResponseRedirect('/')
# return render(request, 'Login.html', context)
else:
print("{} login failure: not_active".format(UserName))
else:
## user is not exist or pwd is error
print("{} login failure: user is not exist or pwd is error".format(UserName))
return render(request, 'Login.html', context)
# 注销
@csrf_exempt
def Logout(request):
hcq_write(request.session.get('log_file_path'), True, False, "[{}({})] 成功退出系统".format(
request.session.get('UserName'), request.session.get('RoleTypeID')))
auth.logout(request)
return HttpResponseRedirect('/')
Login.html
<body>
<table width="100%">
<!-- 顶部部分 -->
<tr height="41"><td colspan="2" background="{% static 'images/login_top_bg.gif' %}"> </td></tr>
<!-- 主体部分 -->
<tr style="background:url({% static 'images/login_bg.jpg' %}) repeat-x;" height="532">
<!-- 主体右部分 -->
<td id="right_cont">
<table height="100%">
<tr height="30%"><td colspan="3"> </td></tr>
<tr>
<td width="30%" rowspan="5"> </td>
<td valign="top" id="form">
<form action="" method="post">
{% csrf_token %}
<table valign="top" width="50%">
<tr>
<td colspan="2">
<h4 style="letter-spacing:1px; font-size:16px; font-weight: bold;">xxxx管理系统</h4>
</td>
</tr>
<tr>
<td>账号:</td>
<td>
<input type="text" id="form_UserName" name="form_UserName" value="" placeholder="请输入用户名...">
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" id="form_UserPWD" name="form_UserPWD" value="" placeholder="请输入密码...">
</td>
</tr>
<!-- <tr>
<td>验证码:</td>
<td>
<input type="text" name="" value="" style="width:80px;"/>
</td>
</tr> -->
<tr class="bt" align="center">
<td>
<input type="submit" value="登录" />
</td>
<td>
<input type="reset" value="重填" />
</td>
</tr>
</table>
</form>
</td>
<td rowspan="5"> </td>
</tr>
<tr><td colspan="3"> </td></tr>
</table>
</td>
</tr>
<tr id="login_bot"><td colspan="2"><p>Copyright © 2018 </p></td></tr>
</table>
</body>
base.html
<body>
<div class="container-fluid">
<table cellpadding="0" width="100%" height="64" background="{% static 'images/top_top_bg.gif' %}">
<tr valign="top">
<td width="50%">
<a href="/"> <!-- 返回主页 -->
<img style="border:none" src="{% static 'images/logo3.png' %}" />
</a>
</td>
<td width="30%" style="padding-top:13px;font:15px Arial,SimSun,sans-serif;color:#FFF">
{% if UserName %}
{% ifequal RoleTypeID 'admin' %}
尊敬的 <b>{{ NickName }}</b>(管理员) 您好,感谢登陆使用!
{% else %}
尊敬的 <b>{{ NickName }}</b> 您好,感谢登陆使用!
{% endifequal %}
{% else %}
您好,请先登录!
{% endif %}
</td>
<td style="padding-top:10px;padding-right:10px;" align="right">
<a href="\"><img style="border:none" src="{% static 'images/index.gif' %}" /></a>
<a href="{% url 'app_ManageSystem:Logout' %}"><img style="border:none" src="{% static 'images/out.gif' %}" /></a>
</td>
</tr>
</table>
</div>
</body>
创建用户:
# -*- coding: utf-8 -*-
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BR_Pro_Manage_System.settings')
django.setup()
from app_ManageSystem.models import *
def Add_Users(UserName, UserPWD, RoleTypeID, NickName):
try:
if not User.objects.filter(username = UserName, password = UserPWD).exists():
NewUser = User.objects.create_user(username = UserName, password = UserPWD)
NewUser.save()
if not BRsystemUser.objects.filter(Users = NewUser, UserName = UserName).exists():
new_myuser = BRsystemUser.objects.get_or_create(Users = NewUser, UserName = UserName, UserPWD = UserPWD, RoleTypeID = RoleTypeID, NickName = NickName)[0]
new_myuser.save()
print("[{}] saved".format(UserName))
except Exception as e:
print("[error] Add_Users: {}".format(e))
### main
def population():
# # Add_Users(UserName, UserPWD, RoleTypeID, NickName)
Add_Users("hcq", "123", "general", "houchaoqun")
Add_Users("jackan", "123", "admin", "kangjie")
### main program
if __name__ == '__main__':
population()