项目实战-后台员工信息管理(增删改查登录与退出)

本文详细介绍了使用Django框架构建后台管理系统的过程,包括员工信息管理(增删改查)、登录与退出功能。通过创建项目、设置应用、配置路由、数据库操作、模板设计等步骤,实现了一个完整的后台管理平台。
摘要由CSDN通过智能技术生成

代码在以下~https://gitee.com/hedyyi/myobject.git

以下为笔记~

项目搭建:
1.创建项目:django-admin startproject myobject
2.创建应用:python manage.py startapp myadmin/web/mobile
3.创建模板目录:templates(模板中对应各应用目录myadmin/web/mobile)
4.创建静态资源目录:static(目录中对应各应用目录myadmin/web/mobile,并放置图片文件uploads)
5.在每一个应用目录下创建视图包views并删除原有的views.py (init.py和index.py)
5.将项目myobject中的路由文件url.py复制一份到各应用目录下

6.项目框架配置;项目myobject目录下setting.py文件
1. 配置允许访问的主机名信息 ALLOWED_HOSTS = ['*']
2. 将myadmin,web,mobile的应用添加到项目框架结构中 INSTALLED_APPS
3. 配置模板目录 os.path.join(BASE_DIR,'templates') TEMPLATES
4. 配置项目的数据库连接信息;DATABASES
5. 设置时区和语言 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'
6. 配置网站的静态资源目录 STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

7.项目myobject目录下路由urls.py配置
引入包

from django.urls import include
urlpatterns = [
#path('admin/', admin.site.urls),
path('', include("web.urls")),                # 默认前台大堂点餐端
path('myadmin/', include("myadmin.urls")),     # 后台管理端
path('mobile/', include("mobile.urls")),    # 移动会员端
]

8.在各应用目录下路由urls.py配置

from django.urls import path
from myadmin.views import index
urlpatterns = [
    # 后台首页
    path('', index.index, name="myadmin_index"),
]

9.在各应用目录下视图 views/index.py配置

   from django.shortcuts import render
    from django.http import HttpResponse
    #后台首页
    def index(request):
        return HttpResponse('欢迎进入点餐系统网站后台管理!')

10.运行测试;在项目根目录下启动服务;python manage.py runserver

11.摆放后台首页面(涉及前端内容)从github上下载一个后台简洁模板:https://github.com/ColorlibHQ/AdminLTE

12.将模板里面的bower_components、dist、local、package.json复制到项目的后台静态资源目录static/myadmin/中

13.在templates/myadmin创建index目录,里面创建index.html文件,将github下载下来的html页面内容复制进来,将里面的路径进行填充{% static 'myadmin/... '%}

14.在templates/myadmin创建base.html文件,以便继承使用,将index.html里面的内容全剪切过来,将不需要继承的地方剪切并进行占位 {% block main_body %} {% endblock %}

15.回到index.html文件中进行继承;{% extends 'myadmin/base.html' %};表示继承myadmin下面的base.html文件

{% block main_body %}
上一步剪切的东西复制过来
{% endblock %}

项目实战-后台员工信息管理-
16.在数据库中创建user表(员工账号id,员工账号,昵称,密码,密码干扰值,状态,创建时间,修改时间)
17.定义Model类(myadmin/models.py);定时列表中的字段信息
18.新增视图文件(myadmin/views/user.py),主要定义增删改查的方法;
18.配置urls路由信息;(myadmin/urls.py),将定义的增删改查的方法路由放进去
19.编辑后台模板,创建templates/myadmin/user/index.html,继承base.html内容 并将AdminLTE中部分内容复制进去修改复制到index.html即可(主要改下列表显示的字段信息以及进行循环并各种判断)
20.编辑base.html内容,将首页和员工管理的地址进行反解析,首页{% url ‘myadmin_index’ %};员工管理{% url ‘myadmin_user_index’ %}

21.列表分页操作;在myadmin/views/user.py浏览方法里添加分页操作;
22.templates/myadmin/user/index.html文件中循环列表数据,以及加上选中当前页面以及上一页下一页的判断

23.列表搜索;复制搜索条件到index.html (

)下面

              <div class="input-group-btn">
                <button type="submit" class="btn btn-default"><i class="fa fa-search"></i></button>
              </div>
            </div>
            </form>

24.在myadmin/views/user.py中继续封装完善方法;
“”“获取,判断并封装keyword键搜索”“”
mywhere = []
kw = request.GET.get(“keyword”,None)
if kw:
#ulist = ulist.filter(username__contains=kw) #单个搜索
ulist = ulist.filter(Q(username__contains=kw) | Q(nickname__contains=kw)) #Q是表示为且的关系
mywhere.append(“keyword=”+kw)

25.在index.html完善根据搜索条件翻页的时候也能被选中

  <li><a href="{% url 'myadmin_user_index' pIndex|add:-1 %}?{
   { mywhere|join:'&' }}">&laquo;</a></li>
                  {
   % for p in plist %}
                {
   #根据判断条件数据当前页列表#}
                <li {
   % if p == pIndex %} class="active"{
   % endif %}><a href="{% url 'myadmin_user_index' p %}?{
   { mywhere|join:'&' }}">{
   {
    p }}</a></li>
                  {
   % endfor %}
                {
   #下一页#}
                <li><a href="{% url 'myadmin_user_index' pIndex|add:1 %}?{
   { mywhere|join:'&' }}">&raquo;</a></li>

26.添加操作;myadmin/views/user.py
add;仅加载页面return render(request, "myadmin/user/add.html")
insert执行添加;return render(request, "myadmin/info.html", context);进行添加操作需要的内容封装

27.创建myadmin/user/add.html;在AdminLTE中找到add.html相关的,复制部分即可;记得继承

{% extends “myadmin/base.html” %}
{% block main_body %}
这里放置添加的内容
{% endblock %}

28.创建myadmin/info.html;主要是为了添加成功后的提示。

{
   % extends "myadmin/base.html" %}
{
   % block main_body %}
    <!-- Content Header (Page header) -->
    <section class="content-header">
      <h4>
        信息提示:
      </h4>
    </section>

    <div class="pad margin no-print">
      <div class="callout callout-info" style="margin-bottom: 0!important;padding-left: 50px">
        <h3><i class="fa fa-exclamation-triangle"></i>  &nbsp; {
   {
    info }}</h3>
      </div>
    </div>
{
   % endblock %}

29.在myadmin/user/indexl.html;更改add.html这部分内容;

 <a role="button" href="{% url 'myadmin_user_add' %}" class="btn btn-primary">

30.即可在页面添加操作成功

31.删除操作;myadmin/views/user.py;继续封装完善

def delete(request,uid=0):
    '''执行添加'''
    try:
        ob = User.objects.get(id=uid)
        ob.status = 9
        ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        ob.save()
        context = {
   "info": "删除成功!"}
    except Exception as err:
        print(err)
        context = {
   "info": "删除失败"}
    return render(request, "myadmin/info.html", context)

32.在myadmin/user/index.html,在删除按钮的操作上,把url渲染进去

 <button type="button" onclick="doDel('{% url 'myadmin_user_delete' vo.id %}')" class="btn btn-danger btn-xs">
 <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 删除</button>

33.在templates/myadmin/base.html中加入删除成功后的提示信息

 <script type="text/javascript">
    function doDel(url){
   
    Modal.confirm({
   
        msg: "确定要删除吗?",
        title: ' 信息提示',
        btnok: '确定',
        btncl:'取消'
      }).on(function (e){
   
        if(e){
   
            window.location.href=url;
        }
      });
    }

34.即可在页面上删除成功操作

35.编辑修改操作;封装edit和update方法;

def edit(request,uid=0):
    '''执行添加'''
    try:
        ob = User.objects.get(id=uid)
        context = {
   "user": ob}
        return render(request, "myadmin/user/edit.html", context)
    except Exception as err:
        print(err)
        context = {
   "info": "没有找到要修改的信息"}
        return render(request, "myadmin/info.html", context)

def update(request,uid):
    '''执行添加'''
    try:
        ob = User.objects.get(id=uid)
        ob.status = request.POST['status']
        ob.nickname = request.POST['nickname']
        ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        ob.save()
        context = {
   "info": "修改成功!"}
    except Exception as err:
        print(err)
        context = {
   "info": "修改失败!"}
    return render(request, "myadmin/info.html", context)

36.新增templates/user/edit.html页面(复制add.html再修改即可)

37.修改index.html中编辑的跳转链接

           <a type="button" href="{% url 'myadmin_user_edit' vo.id %}" class="btn btn-success btn-xs">
              <span class="glyphicon glyphicon-edit" aria-hidden="true"></span> 编辑</a>

38.增删改查即完成操作

39.项目实战之后台管理员登陆与退出,会使用到Django框架中的session,而session信息又存放的数据库中,所以要先使用数据迁移命令在MySQL数据库中先生成一些Django默认自带表。 python manage.py migrate

40.添加中间件,此中间件对后台网址访问做了是否登录的判断,只要访问的URL地址是以 “/admin” 开头的都会执行是否登录判断验证

41.在myadmin应用中创建中间件,创建文件:myobject/myadmin/shopmiddleware.py

# 自定义中间件类
from django.shortcuts import redirect
from django.urls import reverse

import re

class ShopMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.
        print("ShopMiddleware")

    def __call__(self, request):

        # 获取当前请求路径
        path = request.path
        #print("mycall..."+path)

        # 后台请求路由判断
        # 定义网站后台不用登录也可访问的路由url
        urllist = ['/myadmin/login','/myadmin/dologin','/myadmin/logout','/myadmin/verify']
        # 判断当前请求是否是访问网站后台,并且path不在urllist中
        if re.match(r"^/myadmin",path) and (path not in urllist):
            # 判断当前用户是否没有登录
            if "adminuser" not in request.session:
                # 执行登录界面跳转
                return redirect(reverse('myadmin_login'))


        # 请求继续执行下去
        response = self.get_response(request)
        # Code to be executed for each request/response after
        # the view is called.
        return response

42.将自定义的中间件注册到项目中,编辑 myobject/settings.py 配置文件,添加代码

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'myadmin.shopmiddleware.ShopMiddleware',     #注册中间件
]

43.配置路由、模板并测试中间件;配置路由 myobject/myadmin/urls.py 加入如下代码

  # 后台管理员路由
    path('login', index.login, name="myadmin_login"),
    path('dologin', index.dologin, name="myadmin_dologin"),
    path('logout', index.logout, name="myadmin_logout"),

44.编写视图 myobject/myadmin/views/index.py文件 并加入如下代码

# ==============后台管理员操作====================
# 会员登录表单
def login(request):
    return render(request,'myadmin/index/login.html')

# 会员执行登录
def dologin(request):
    pass

# 会员退出
def logout(request):
    pass

45.创建登录模板文件: templates/myadmin/index/login.html 代码如下

{
   % load static from static%}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>后台管理登录界面</title>
  <!-- 支持响应式布局 -->
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <link rel="stylesheet" href=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

As。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值