python实战WEB-Django (二)

一、继承之前GUI的练习数据,我们继续使用mysql数据库,先设置数据库。

1、编辑settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #数据库类型
        'NAME': 'test',        #数据库名
        'USER':'root',         #用户名
        'PASSWORD':'123456',   #密码
        'HOST':'127.0.0.1',    #地址
        'PORT':3306            #端口
    }
}

 (后来发现,在代码中直接用参数调用数据的话,这步可以不做)

二、来做一个前端页面。

查找了很多教程,用表单提交的数据后都是跳转到另一个页面显示,要不就要用其它插件语言来实现,但我现在没有学其它前端语言(真*小白)。最后自己想了个取巧的法子,提交后跳回原页面显示结果,不多说直接还原过程。

1、新建一个前端模板,在app目录下新建 templates文件夹,在其下新建index.html,打开编辑。

 一个下拉列表用于选择查询的字段

一个输入栏输入查询的值

一个提交按钮

一个表格显示查询结果

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>学生信息查询</title>
</head>
<body>
    <h1>学生信息查询:</h1>
    <form method = "post" action = "/index/">
    {% csrf_token %}    <!--这行是django的数据传输防伪造随机验证-->
    选择查询的字段:
    <select name = "input_name" >  
        {% for i in list_n %}
            <option>{{i}}</option>
        {% endfor %}
    </select><br>
    输入要查询的值:
    <input type = "text" name = "input_value" placeholder = "请输入正确值" ><br><br>
    <input type = "submit" value = "查询">
    </form>
    <br><br>
    查询结果:
    <table border = "1">
        <tr>
        {% for i in list_n %}
            
            <td>{{i}}</td>
            
        {% endfor %}
        </tr>
        
        {% for v in list_v %}
        <tr>
            {% for s in v %}
            <td>{{s}}</td>
            {% endfor %}
        </tr>
        {% endfor %}
        
    </table>
</body>
</html>

以上是完成后的代码,其实一开始只做了显示元素,没有那些逻辑,也是搞了很久才搞明白数据交互的语法和html里逻辑运算的语法,原以为不需要研究太多Django,还是花了大力气去了解,走了很多错路,痛苦!

 三、后台数据处理。

1、修改视图文件,创建一个index函数。

from django.shortcuts import render

# Create your views here.
import mysql.connector
class sql:
    def __init__(self):
        self.con = mysql.connector.connect(
        host="localhost",       # 数据库主机地址
        user="root",    # 数据库用户名
        passwd="123456",   # 数据库密码
        database="test"  #数据库名称
        )
        self.cursor = self.con.cursor()
        
    def select(self,sql_sr): #类定义了init后下面的函数第一参数必须是self否则引用报错
        self.cursor.execute(sql_sr)
        result = self.cursor.fetchall()
        return result
        
    def insert(self,sql_sr):
        self.cursor.execute(sql_sr)
        self.con.commit()
        print(self.cursor.rowcunt,'新增成功')
        
def index(request):
    sql_sr = "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'student'"
    list_name1 = sql().select(sql_sr)
    list_name = []
    for i in list_name1:
        for s in i:
            list_name.append(s)
    
    input_name = request.POST.get('input_name');
    input_value = request.POST.get('input_value');

    if input_value:
        sql_sr1 = "select * from Student where student." + input_name + "=" + "'" + input_value +"'"
        list_value = sql().select(sql_sr1)

        return render(request, 'index.html',{'list_n':list_name,'list_v':list_value})
    else:
        return render(request, 'index.html',{'list_n':list_name})
    

从数据库表头名称作为一个列表list_name传递给模板,因为初始查询出来的数据是以元组为值的数列,样式如下

[('Student_ID',), ('Name',), ('Age',), ('Sex',), ('Class',)]

直接取出的值格式不对,需要做处理。

本来想将list_value也做同样处理再传给前端,后来发现不能这样做,会导致表格显示的列不对,又改为传原始数据让前端来处理

2、修改urls.py,关联index函数。注意修改的是上层文件夹里的,就是和setting同一个文件夹的,我还把app文件夹里的urls删除了。

from django.contrib import admin
from django.urls import path
from testapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
]

要把自己的views的函数import出来,不然会报错。

四、结果

初始进入页面:

 输入参数进行查询:

 五、总结

1、想抛开django来探讨数据交互问题是不行滴,你用了人家的前端还是得了解才能用得转。前面就是因为不了解模板的引用路径问题导致一直报错,不得已删档重来。

2、前端往后台传数据数据其实就用一个post的方法,据说还有一个get方法可以主动从后台获取数据,还没了解。

3、代码量其实不多,更多的时间是花在了解Django语法以及配置上。

总的来说要有一个views文件,里面放置处理函数;

要使得网址打开就能引用这些函数,要将视图文件及基体函数名称配置到urls文件上;

html文件可引用views里变量的值,通过{{i}}的格式;html里所有逻辑语句要用{%   %}括起来;

views文件要传变量给html以及调用html页面内容通过render命令实现,传参格式 {'接收名':变量名}

原文地址:https://www.cnblogs.com/fct-notebook/p/14067611.html