zoukankan      html  css  js  c++  java
  • 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命令实现,传参格式 {'接收名':变量名}

  • 相关阅读:
    pat03-树1. 二分法求多项式单根(20)
    pat05-图1. List Components (25)
    pat06-图4. Saving James Bond
    pat05-图3. 六度空间 (30)
    pat05-图2. Saving James Bond
    pat04-树9. Path in a Heap (25)
    pat04-树8. Complete Binary Search Tree (30)
    pat04-树7. Search in a Binary Search Tree (25)
    pat04-树5. File Transfer (25)
    Two Sum
  • 原文地址:https://www.cnblogs.com/fct-notebook/p/14067611.html
Copyright © 2011-2022 走看看