关于@Python+Django+Hadmin

关于Python+Django+Hadmin的初级使用

  大家好,我是Python开发新手,以前一直在使用Shell和Php脚本,Python使用基本都很少,这两年Python越来越火,咱们做运维的再不使用Python等待何时呢,开个玩笑。这几天一直在看Python+Django框架,写了一个简单的数据库web管理,并且也套用了较为流程的Bootstrap和Hadmin前端框架,使用Hadmin前端框架,发现其前端的功能实在是太强大了,在这里我把我的代码分享一下。

models.py

from django.db import models

class Students(models.Model):
school_name = models.CharField(max_length=10)
grade_num = models.IntegerField()
class_num = models.IntegerField()
name = models.CharField(max_length=30)
sex = models.CharField(max_length=2)
age = models.IntegerField()
hob = models.CharField(max_length=50)

def str_(self):
return ‘school_name:’+self.school_name+’;grade_num:’+str(self.grade_num)+’;class_num :’
+ str(self.class_num)+’;name:’+self.name+’;sex:’+self.sex+’;age:’+self.age+’;hob:’+self.hob

settings.py

import os
import pymysql
pymysql.install_as_MySQLdb()

INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘StudentS.apps.StudentsConfig’,
‘ClassStu’ //上面都是自带的,这个是默认的工程名,是需要自己添加的
]

//这格式数据库连接信息
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘ClassStu’,
‘USER’: ‘root’,
‘PASSWORD’: ‘12345678’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
}
}

views.py

from django.contrib.auth import authenticate
from django.shortcuts import render
from django.http.response import JsonResponse
from django.http import HttpResponseRedirect
from django.contrib.auth.models import User
from django.shortcuts import render_to_response
import pymysql
import math
from django.views.decorators.csrf import csrf_protect

from StudentS.models import Students

@csrf_protect

//插入数据库
def insert(request):
cook = request.COOKIES.get(‘cookie_username’)
if cook is not None:
if request.POST:
Students.objects.create(school_name=request.POST[‘school_name’], grade_num=request.POST[‘grade_num’],
class_num=request.POST[‘class_num’], name=request.POST[‘name’], sex=request.POST[‘sex’],
age=request.POST[‘age’], hob=request.POST[‘hob’]),
return render(request, ‘add.html’, {‘result’: “成功添加数据!”})
return render(request, ‘add.html’)

//显示数据记录
def show(request):

cook = request.COOKIES.get('cookie_username')
if cook is not None:return render(request, 'index.html', {'aa': cook})    # request,地址,参数
else:return render(request, 'login.html')

//默认登录首页
def index(request):

return render(request, 'login.html')    # request,地址,参数

//用户登录认证及cookies生成
def login(request):
if request.method == ‘POST’: # 判断是否为post提交方式
username = request.POST.get(‘username’, ’ ‘) # 通过post.get()方法获取输入的用户名及密码
password = request.POST.get(‘password’, ’ ‘)
user = authenticate(username=username, password=password)
# userpassjudge = User.objects.filter(username=username, password=password)
if user is not None: # 判断用户名及密码是否正确
response = HttpResponseRedirect(’/show/’) # 如果正确,(这里调用另一个函数,实现登陆成功页面独立,使用HttpResponseRedirect()方法实现
response.set_cookie(‘cookie_username’, username, 3600)
return response
else:
return render(request, ‘login.html’, {‘error’: ‘username or password error’}) # 不正确,通过render(request,“login.html”)方法在error标签处显示错误提示

//从数据库中取出数据,用于展现在Hadmin的前端页面表格中
def data(request):
context = {} # 封装返回参数
results = Students.objects.all()
# sql = ‘SELECT * FROM students_students’
# cur.execute(sql) # 执行SQL语句
# results = cur.fetchall() # 获取所有记录,列表查询所有
r = []
for i in results:

    tmp = {}tmp["id"] = i.idtmp["school_name"] = i.school_nametmp["grade_num"] = i.grade_numtmp["class_num"] = i.class_numtmp["name"] = i.nametmp["sex"] = i.sextmp["age"] = i.agetmp["hob"] = i.hobr.append(tmp)rowNum = 10//rows为Hadmin表格页的记录集,records是记录数,pages是每页显示10条记录,默认的显示页数
return JsonResponse({"rows": r, "records": len(r), "pages": math.ceil(len(r)/rowNum)})

urls.py

from django.conf.urls import url
from django.urls import path, include
from django.contrib import admin

from StudentS import views

urlpatterns = [
url(r’^′,views.index),url(r′add/', views.index), url(r'^add/′,views.index),url(r′add/’, views.insert),
url(r’^show/′,views.show,name=′show′),url(r′data/', views.show, name='show'), url(r'^data/′,views.show,name=′show′),url(r′data/’, views.data),
url(r’^login/$’, views.login, name=‘login’),
url(r’^admin/’, admin.site.urls),
]

add.html(记录添加)

{% load staticfiles %}

{% csrf_token %} 姓 名:
性 别:
年 龄:
学 校:
年 级:
班 级:
爱 好:

{{ result }}

## index.html(显示数据库记录数) {% load staticfiles %}

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"><title> - jqGird</title>
<meta name="keywords" content="">
<meta name="description" content=""><link rel="shortcut icon" href="favicon.ico"> <link href="{% static 'css/bootstrap.min.css'%}?v=3.3.6 " rel="stylesheet">
<link href="{% static 'css/font-awesome.css'%}?v=4.4.0 " rel="stylesheet"><!-- jqgrid-->
<link href="{% static 'css/plugins/jqgrid/ui.jqgrid.css'%}?0820" rel="stylesheet"><link href="{% static 'css/animate.css'%}" rel="stylesheet">
<link href="{% static 'css/style.css'%}?v=4.1.0 " rel="stylesheet"><style>/* Additional style to fix warning dialog position */#alertmod_table_list_2 {top: 900px !important;}
</style>
<div class="wrapper wrapper-content  animated fadeInRight"><div class="row"><div class="col-sm-12"><div class="ibox "><div class="ibox-title"><h5>学生信息表{{ aa }}</h5></div><div class="ibox-content"><div class="jqGrid_wrapper"><table id="table_list_1"></table><div id="pager_list_1"></div></div><p>&nbsp;</p><div class="jqGrid_wrapper"><table id="table_list_2"></table><div id="pager_list_2"></div></div></div></div></div></div>
</div><!-- 全局js -->
<script src="{% static 'js/jquery.min.js' %}?v=2.1.4"></script>
<script src="{% static 'js/bootstrap.min.js' %}?v=3.3.6"></script><!-- Peity -->
<script src="{% static 'js/plugins/peity/jquery.peity.min.js' %}"></script><!-- jqGrid -->
<script src="{% static 'js/plugins/jqgrid/i18n/grid.locale-cn.js' %}?0820"></script>
<script src="{% static 'js/plugins/jqgrid/jquery.jqGrid.min.js' %}?0820"></script><!-- 自定义js -->
<script src="{% static 'js/content.js' %}?v=1.0.0"></script><!-- Page-Level Scripts -->
<script>$(document).ready(function () {$.jgrid.defaults.styleUI = 'Bootstrap';// Examle data for jqGridvar mydata = ""$("#table_list_2").jqGrid({url: "/data/",multiselect : true, //是否可以多选,第一列会出现多选按钮控件loadonce: true,     //如果是json数据加载,只加载一次,动静分离,分页完全使用前端来分页,数据显示无需再与后端服务器进行交互datatype: "json",height: 450,autowidth: true,shrinkToFit: true,rownumbers: true,   //是否显示记录序号,true显示,false隐藏rowNum: 10,rowList: [10, 20, 30],colNames: [ '学校', '年级', '班级', '姓名', '性别', '年龄','爱好'],colModel: [{#{   name: 'id', index: 'id', editable: true, width: 60, sorttype: "int", search: true},#}{   name: 'school_name', index: 'school_name', editable: true, width: 90,},{   name: 'grade_num', index: 'grade_num', editable: true, width: 40, sorttype: "int"},{   name: 'class_num', index: 'class_num', editable: true, width: 40, align: "left", sorttype: "int"},{   name: 'name', index: 'name', editable: true, width: 80, align: "left",},{   name: 'sex', index: 'sex', editable: true, width: 80, align: "left",},{   name: 'age', index: 'age', editable: true, width: 100, sorttype: "int"},{   name: 'hob', index: 'hob', editable: true, width: 80, align: "left",},],jsonReader: {                        //描述json 数据格式的数组,需修改root: 'rows',page: "current",                   // json中代表当前页码的数据total: "pages",    // json中代表页码总数的数据records: "total",// json中代表数据行总数的数据repeatitems: false,             // 如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素(即可以json中元素可以不按顺序);而所使用的name是来自于colModel中的name设定。{#cell: "cell",#}{#id: "fRoleId",#}{#userdata: "userdata",#}},pager: "#pager_list_2",viewrecords: true,caption: "学生信息表",add: true,edit: true,addtext: 'Add',edittext: 'Edit',hidegrid: false,editurl: "/add/",});// Add selection{#$("#table_list_2").setSelection(4, true);#}// Setup buttons$("#table_list_2").jqGrid('navGrid', '#pager_list_2', {edit: true,add: true,del: true,search: true,position : 'left',height: 200,closeAfterEdit:true,reloadAfterSubmit: true,closeOnEscape:true,editData:{csrfmiddlewaretoken: '{{ csrf_token }}'}{#editData: {csrfmiddlewaretoken: $.cookie(CSRF_COOKIE_NAME)}#}//addfunc : openDialog4Adding,    // (1) 点击添加按钮,则调用openDialog4Adding方法//editfunc : openDialog4Updating, // (2) 点击编辑按钮,则调用openDialog4Updating方法//delfunc : openDialog4Deleting,  // (3) 点击删除按钮,则调用openDialog4Deleting方法//alerttext : "请选择需要操作的数据行!"  // (4) 当未选中任何行而点击编辑、删除、查看按钮时,弹出的提示信息});// jQuery("#table_list_2").jqGrid('navGrid','#pager_list_2',{});// Add responsive to jqGrid$(window).bind('resize', function () {var width = $('.jqGrid_wrapper').width();{#$('#table_list_1').setGridWidth(width);#}$('#table_list_2').setGridWidth(width);});});</script>

首页显示图片

Python+Django+Hadmin的初级使用相关推荐

  1. python django web项目的构建步骤(一)

    Django 一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的.并于2 ...

  2. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  3. 基于Python+Django实现药品管理系统

    作者主页:编程指南针 简介:Java领域优质创作者.CSDN博客专家  Java项目.简历模板.学习资料.面试题库.技术互助 文末获取源码 项目编号:BS-Python-001 技术架构:Python ...

  4. Python django实现简单的邮件系统发送邮件功能

    Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: ...

  5. python基础单词-学习Python必背的初级单词有哪些?

    今天小编要跟大家分享一些学习Python必须认识的英文单词,同时也是学习编程都必须会的单词,下面来和小编一起学习一下吧! application 应用程式 应用.应用程序 application fr ...

  6. python django事务transaction源码分析

    2019独角兽企业重金招聘Python工程师标准>>> python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少 ...

  7. Python Django框架入门第一课

    Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...

  8. Win10+Python+Django+Nginx+MySQL开发教程及实例(1)——开发环境搭建

    Win10+Python+Django+Nginx+MySQL开发教程及实例 PaulTsao 本教程共有三篇内容: 第一篇:Win10+Python+Django+Nginx+MySQL 开发环境搭 ...

  9. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  10. python django部署docker_如何Docker化Python Django应用程序

    Docker是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个用 ...

最新文章

  1. sublime运行错误
  2. UICollectionView的基本使用(1)
  3. linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常
  4. cocos2dx怎样设置ios和Android横屏竖屏的几种方法
  5. python2.7安装pygame_python 安装 pygame了
  6. numpy-np.isin
  7. Logistic回归及梯度上升算法
  8. 车联网登录显示连接不上服务器,车联网,如何解决连接的问题?
  9. mac电脑上简单实用的cad制图软件大全
  10. HC Bridge容器网络模式分享
  11. 安装程序无法打开注册表项 UNKNOWN\Components\…解决办法
  12. Redis基础命令(Hash类型)对field进行的操作
  13. 基于LayUI使用FullCalendar实现日程管理
  14. 72 ----直纹面、二次直纹面、单叶双曲面、双曲抛物面
  15. 利用python计算个人所得税
  16. 转:企业最稀缺和最具价值的人力资源到底是什么?
  17. [QUANTAXIS量化分析]三因素模型
  18. 记录一次mongoDB错误 errmsg: cannot use the part () to traverse the element
  19. 计算机键盘不亮,电脑键盘失灵指示灯不亮怎么办
  20. 课程设计:旅游管理系统,C语言+图结构带你轻松完成作业

热门文章

  1. vray渲染器的工作流程你清楚吗?
  2. 3dmax快捷键大全
  3. java 单例模式(饿汉模式和懒汉模式)
  4. win7旗舰版无法安装kb2670838ie补丁都打不上去 玩h1z1
  5. visio一分二的箭头_Microsoft Office Visio绘画双箭头直线的具体步骤介绍
  6. There is no more space for virtual disk. db_ sqlserver , vmdk.You might be able to continue this ses
  7. 木马文件slader以及各种捆绑木马、流氓软件
  8. 电子技术基础数字部分第六版_知识速递 | 数字电子技术基础知识要点
  9. 惠普局域网共享打印机设置_网络共享惠普打印机的操作方法
  10. 网易云音乐Mac上传云盘