Django学习入门教程

Stella981
• 阅读 478

本文 pdf 下载链接

Django学习入门教程

基础部分

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

创建Django项目
Django学习入门教程

创建apps

Django学习入门教程


一、简单配路由

Django学习入门教程
Django学习入门教程
Django学习入门教程


二、接收url的参数

Django学习入门教程
Django学习入门教程
Django学习入门教程


三、url正则表达式传参

Django学习入门教程

Django学习入门教程
Django学习入门教程

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

Django学习入门教程
Django学习入门教程

Django学习入门教程
Django学习入门教程

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

下面介绍 CBV 就是 class 通过类

五、登录案例:

Django学习入门教程

Django学习入门教程
Django学习入门教程
Django学习入门教程



综合案例部分

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

Django学习入门教程
Django学习入门教程
Django学习入门教程

Django学习入门教程
Django学习入门教程
内容的html部分,界面不是很好看,不过这不是重点,主要了解操作过程就好了。

一、班级表的操作

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

文件目录:
Django学习入门教程

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><a 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})

Django学习入门教程

1.使用cursor = conn.cursor(pymysql.cursors.DictCursor)代码
result里面的数据:字典
Django学习入门教程
页面显示:

Django学习入门教程
2.cursor = conn.cursor() # 出现前端网页拿不到数据,因为元组传不过去
Result里面的结果:元组
Django学习入门教程
页面显示:

Django学习入门教程


第二节:添加班级

1.创建数据库帮助类:

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

Django学习入门教程

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()

Django学习入门教程 Django学习入门教程

3.删除班级:

Classes.html

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

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

演示:

Django学习入门教程


第二节:分包管理

1.创建app

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

Django学习入门教程
Django学习入门教程
Django学习入门教程

2.配置路由

Django学习入门教程
Django学习入门教程

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

<a href =/classes/class_edit?cid={
  
  
  { row.id }}> 编辑</a>|
<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 别名 %}}即可。

Django学习入门教程
Django学习入门教程
使用反向解析:

前端:
<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里面配置如下:

Django学习入门教程

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

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

本文 pdf 下载链接

本文同步分享在 博客“战 胜”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这