首页 > 技术文章 > Django入门学习教程

1837290753qq 2021-02-07 11:11 原文

基础部分

须知: 1.HttpResponse 返回字符串 2.Render 返回一个Html文件 3.Redirect 重定向

创建Django项目 在这里插入图片描述

创建apps

在这里插入图片描述在这里插入图片描述


一、简单配路由

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述


二、接收url的参数

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述


三、url正则表达式传参

在这里插入图片描述在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

四、表单提交(GET、POST、页面跳转)

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

上面介绍的都属于 FBV 就是function 通过函数处理

下面介绍 CBV 就是 class 通过类

五、登录案例:

# #

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述



综合案例部分

这个案例是一个管理系统:有学生表、班级表、教师表,班级与教师的关系表,对上面四张表进行操作,完成前端网页和后端处理,通过本案例熟悉Django项目的编程。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 内容的html部分,界面不是很好看,不过这不是重点,主要了解操作过程就好了。

一、班级表的操作

第一节:读取class表的数据,在界面显示

文件目录: 在这里插入图片描述

url路由:

from apps import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path("classes/",views.classes),
]

Class.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级列表</title>
</head>
<body>
<h1>班级列表</h1>
<div><href="/class_add/">添加</a></div>
<table border="1">
    <thead>
    <th>ID</th>
    <th>班级名称</th>
    <th>操作</th>
    </thead>
    <tbody>
    {% for row in result %}
        <tr>
            <td>{{ row.id }}</td>
            <td>{{ row.title }}</td>
            <td>
                <a>编辑</a>|
                <a>删除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>

</body>
</html>

Views.py

from django.shortcuts import render,HttpResponse,redirect
from django.views.generic import View
import pymysql

def classes(request):
    conn=pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="classes",
        charset="utf8"
    )
    cursor = conn.cursor() # 出现前端网页拿不到数据,因为元组传不过去
    # cursor = conn.cursor(pymysql.cursors.DictCursor)

    sql="select * from class"
    cursor.execute(sql,())
    result=cursor.fetchall()
    print(result)
    return render(request,"classes.html",{"result":result})

在这里插入图片描述在这里插入图片描述

1.使用cursor = conn.cursor(pymysql.cursors.DictCursor)代码 result里面的数据:字典 在这里插入图片描述 页面显示:

在这里插入图片描述 2.cursor = conn.cursor() # 出现前端网页拿不到数据,因为元组传不过去 Result里面的结果:元组 在这里插入图片描述 页面显示:

在这里插入图片描述在这里插入图片描述


第二节:添加班级

1.创建数据库帮助类:

因为数据库操作要用的地方比较多,所以创建一个工具包utils,在里面创建一个sqlhelper.py的数据库工具文件。

在这里插入图片描述在这里插入图片描述

Sqlhelper.py

import pymysql

class SqlHelper():
    def __init__(self):
        self.connet()
    def connet(self):
        self.conn=pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="classes",
        charset="utf8")
        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)

    def get_list(self,sql,args):
        self.cursor.execute(sql, args)
        result = self.cursor.fetchall()
        return result

    def close(self):
        self.cursor()
        self.conn.close()

使用工具类:

from apps.utils.sqlhelper import SqlHelper # 导入数据库帮助类
def classes(request):
    obj=SqlHelper()
    sql = "select * from class"
    result = obj.get_list(sql,())
obj.close()
    return render(request,"classes.html",{"result":result})

使用上面代码的效果和原来是一样的。

2.添加班级:

Calss_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加班级</title>
</head>
<body>
<h1>添加班级</h1>
<form method="post" action="/class_add/">
    <p><input type="text" name="title"  placeholder="班级名称"></p>
    <p><input type="submit" value="添加"></p>
</form>
</body>
</html>

Views.py

def class_add(request):
    if request.method=="GET":
        return render(request,"class_add.html")
    else:
        title = request.POST.get("title")
        print(title)
        obj=SqlHelper()
        sql="insert into class(title) values(%s)"
        obj.modify(sql,title)
        obj.close()
        return redirect("/classes/")

Sqlhelper.py

def modify(self,sql,args):
    self.cursor.execute(sql,args)
    self.conn.commit()

在这里插入图片描述在这里插入图片描述

3.删除班级:

Classes.html

<href="/class_del?cid={{ row.id }}">删除</a>

Views.py

def class_del(request):
    cid = request.GET.get("cid")
    sql="delete from class where id=%s"
    obj = SqlHelper()
    obj.modify(sql,cid)
    obj.close()
    return redirect("/classes/")

4.编辑班级:

Classes.html

<href =/class_edit?cid={{ row.id }}> 编辑</a>|

Class_edit.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑班级</title>
</head>
<body>
<form method="post" action="/class_edit/">
    <p><input type="text" value="{{ id }}" name="cid" ></p>
    <p><input type="text" name="title" value="{{ title }}"></p>
    <p><input type="submit" value="更新"></p>
</form>
</body>
</html>

Views.py

def class_edit(request):
    if request.method=="GET":
        cid = request.GET.get("cid")
        obj = SqlHelper()
        sql="select * from class where id=%s"
        result = obj.get_one(sql,cid)
        obj.close()
        return render(request,"class_edit.html",result)

    else:
        cid = request.POST.get("cid")
        title=request.POST.get("title")
        print(cid,title)
        obj=SqlHelper()
        sql="update class set title=%s where id=%s"
        obj.modify(sql,(title,cid))
        return redirect("/classes/")

sqlHelper.py

def get_one(self,sql,args):
    self.cursor.execute(sql, args)
    result = self.cursor.fetchone()
    return result

演示:

在这里插入图片描述在这里插入图片描述


第二节:分包管理

1.创建app

1.创建一个apps的包(原来的不要了,代码还是需要,本来那个apps按理要设置为classes的)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2.配置路由

在这里插入图片描述 在这里插入图片描述

4.将前面写的路由地址同一加上/classes/

<href =/classes/class_edit?cid={{ row.id }}> 编辑</a>|
<href="/classes/class_del?cid={{ row.id }}">删除</a>
<form method="post" action="/classes/class_add/">
等等。。。。

通过上面的路由配置管理,其实是分了两层,最外层是:和项目同名下面的urls文件里的路由;里层是:相应app下的,自己手动添加的urls路由文件。 当前端访问时,首先进入最外层的路由,然后根据配置分配到不同的app文件下的urls路由文件中,从而找到处理函数。


第三节:反向解析

在urls.py 文件中,在进行url映射时,为请求的url命名,以便在模板页面或者views.py视图中可以进行反向解析,同时在修改了url映射的请求路径,名称不变的情况下,不再修改模板页面或者视图中的数据,项目不受影响正常执行! url标签中使用模板变量和普通标签参数一样,空格隔开,{{% url 别名 %}}即可。

在这里插入图片描述 在这里插入图片描述 使用反向解析:

前端:
<div><a href="{% url 'classes:class_add' %}">添加</a></div>
<a href ="{% url 'classes:class_edit' %}?cid={{ row.id }}"> 编辑</a>|
<a href="{% url 'classes:class_del' %}?cid={{ row.id }}">删除</a>
后端:
return redirect("classes:classes")

补充:使用static下面的内容配置

当我们在项目下面创建一个static文件夹,里面放置一些静态文件,需要在setting.py里面配置如下:

在这里插入图片描述在这里插入图片描述

<body>
     <img src="/static/1.png">
</body>

其他表的操作都差不多,到这里Django基本有所了解了。

本文 pdf 下载链接

每天进步一点点!!!

推荐阅读