Python+Django+Hadmin的初级使用

这篇博客介绍了如何使用Python的Django框架结合Hadmin进行初级开发,包括models.py、settings.py、views.py、urls.py的配置,以及数据的插入和展示。内容涵盖数据库模型设计、用户登录认证、cookies使用,以及在Hadmin中显示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于@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.id
    tmp["school_name"] = i.school_name
    tmp["grade_num"] = i.grade_num
    tmp["class_num"] = i.class_num
    tmp["name"] = i.name
    tmp["sex"] = i.sex
    tmp["age"] = i.age
    tmp["hob"] = i.hob
    r.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’^ ′ , v i e w s . i n d e x ) , u r l ( r ′ a d d / ', views.index), url(r'^add/ ,views.index),url(radd/’, views.insert),
url(r’^show/ ′ , v i e w s . s h o w , n a m e = ′ s h o w ′ ) , u r l ( r ′ d a t a / ', views.show, name='show'), url(r'^data/ ,views.show,name=show),url(rdata/’, 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 jqGrid



        var 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>

首页显示图片

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值