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命令实现,传参格式 {'接收名':变量名}

  • 相关阅读:
    learnyou 相关网站
    hdu 3038 How Many Answers Are Wrong
    hdu 3047 Zjnu Stadium 并查集高级应用
    poj 1703 Find them, Catch them
    poj 1182 食物链 (带关系的并查集)
    hdu 1233 还是畅通工程
    hdu 1325 Is It A Tree?
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    POJ – 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/fct-notebook/p/14067611.html
Copyright © 2011-2022 走看看