当前位置:   article > 正文

【web开发】6、Django(1)_django是前端还是后端

django是前端还是后端

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Django是什么?

Django属于后端(也称为服务器端)Web开发框架
它用于构建和管理Web应用程序的服务器端部分,包括处理HTTP请求、管理数据库、处理业务逻辑、生成动态内容以及与前端(客户端)交互
Django的主要任务是处理与服务器和数据库相关的事务,然后将结果发送给前端,以便在用户的浏览器中呈现

二、使用步骤

1.安装Django

cmd:pip install django==2.2.9
安装成功标志:在python安装目录下的scripts下有django-admin.exe

2.创建项目

在终端创建项目
(1)打开终端cmd
(2)cd定位进入某个目录
(3)执行命令创建项目

“D:\python311\Scripts\django-admin.exe” startproject 项目名称

D:/python311/Scripts/django-admin startproject try_mysite
  • 1

//如果D:\python311\Scripts已加入环境系统变量:
django-admin.exe startproject 项目名称

django-admin.exe startproject try_mysite11
  • 1

在这里插入图片描述
Pycharm(专业版)创建项目
在这里插入图片描述
在这里插入图片描述

特殊说明:

在终端创建项目是标准的
Pycharm 在标准的基础上添加了东西;
(1)templates目录(删除)注意:如果没有删除,则在创建模板时,会优先在根目录下寻找templates
(2)setings(左Pycharm创建版,右终端创建版)(专业版增加的内容删除)

在这里插入图片描述

默认项目文件介绍
在这里插入图片描述

settings.py:项目配置文件(连接数据库…注册app)【常操作】
urls.py:URL和函数的对应关系【常操作】
wsgi.py:接受网络请求【不动】
manage.py: 项目的管理,启动项目、创建app、数据管理【不动】

3.创建app

用户管理、订单管理、后台管理、网站、API

法一:终端:python manage.py startapp app01
法二:工具-运行manage.py任务,,在下面输入startapp app 名字

终端

python manage.py startapp app01
  • 1

在这里插入图片描述

默认app文件介绍
在这里插入图片描述
migrations :数据库字段变更记录
admin.py : django默认提供了admin后台管理
apps.py :app启动类
models.py 【*重要】对数据库操作
tests.py :单元测试
views.py: 【重要】函数

4.快速上手

1.确保已注册:【settings.py】

在apps.py文件下找到对应的名字,在settings.py文件下的对应位置进行添加(即注册)。
在这里插入图片描述
在这里插入图片描述

2.编写URL和视图函数对应关系【urls.py】

from app01 import views

urlpatterns = [
    path('index/',views.index),
]
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
3.编写视图函数【views.py】

from django.shortcuts import HttpResponse,

def index(request):
    return HttpResponse("欢迎使用")
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
4.启动django项目
(1)命令行启动python manage.py runserver
(2)pycharm启动 (启动按钮)

注意:Django创建项目所涉及的文件很多,容易混淆或遗漏,下面再写一个页面【urls】,可以多看几遍,会有收获的。

5.再写一个页面【urls.py】
在这里插入图片描述
在这里插入图片描述
6.templates模板【目录下创建html文件】
urls.py下

  path('user/list',views.user_list),
  • 1

views.py下

 def user_list(request):
    return render(request,"user_list.html")
  • 1
  • 2

在app01的下级目录下创建templates目录,并在目录下创建user_list.html。
在这里插入图片描述
7.静态文件:图片\css\js
(1)创建static文件夹,其下创建文件夹css/img/js/plugins
{% load static %}:导入
{% static ‘路径’%}
在这里插入图片描述

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
</head>
<body>
<h1>用户列表</h1>
<input type="text" class="btn btn-primary" value="新建"/>
<div>
    <img src="{% static 'img/证件照.jpg' %}" alt="">
    <script src="{% static 'js/jquery-3.7.0.min.js' %}"></script>
    <script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
</div>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

8.模板语法(django开发的)
本质上:在HTML中写一些占位符,由数据对这些占位符进行替换或处理。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>模板语法的学习</h1>
    <div>{{ n1 }}</div>
    <div>{{ n2 }}</div>
    <div>{{ n2.0 }}</div>
    <div>{{ n2.1 }}</div>
    <div>
        {% for item in n2 %}
        <span>{{ item }}</span>
        {% endfor %}
    </div>
    <div>
        {{ n3.name }}
        {{ n3.salary }}
        {{ n3.role }}
    </div>
    <ul>
        {% for item in n3.keys %}
            <li>{{item}}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for item in n3.values %}
            <li>{{item}}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for k,v in n3.items %}
            <li> {{k}} = {{v}} </li>
        {% endfor %}
    </ul>
{{ n4.1.name }}
{% for item in n4 %}
    <div>{{ item.name }} {{ item.salary }}</div>
{% endfor %}
    <hr/>
{% if n1 == "贝贝" %}
    <hi>哒哒哒哒</hi>
{% else %}
    <h1></h1>
{% endif %}
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

9.请求和响应

def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    username= request.POST.get('username')
    print(username)
    password = request.POST.get('password')
    print(password)
    if username == "a" and password == "123":
        # return HttpResponse("登录成功")
        return redirect("https://www.baidu.com/")

    return render(request,"login.html",{"error_msg":"用户名或密码错误"})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述
django安全机制的校验,解决办法:在form表单下写入{% csrf_token %}

5.模板继承

创建基本模板
首先,您需要创建一个包含网站的共通元素的基本模板。通常,这些元素包括网站的标头导航栏、页脚等。这个模板通常被称为基础模板( base template) 或布局模板 (layout template),并且通常以’.htm1为文件扩展名
在文件最上方{% load static %}
再添加引用css:{% block css %}{% endblock %}
内容添加: {% block content %}{% endblock %}
再添加引用js:{% block js %}{% endblock %}

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     {% block css %}{% endblock %}
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet"
          href="https://cdn.bootcss.com/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css">
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
</head>
<body>
<nav class="navbar navbar-default">
    <div class="container">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">联通用户管理系统</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">管理功能 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="/admin/list/">管理员账户</a></li>
                        <li><a href="/depart/list/">部门管理</a></li>
                        <li><a href="/pretty/list/">靓号管理</a></li>
                        <li><a href="/task/list/">任务管理</a></li>

                    </ul>

                <li><a href="/user/list/">用户列表</a></li>
                <li><a href="/order/list/">订单管理</a></li>
                <li><a href="/chart/list/">数据统计</a></li>
                <li><a href="/upload/form/">Form上传</a></li>
                <li><a href="/upload/model/form/">ModelForm上传</a></li>
                <li><a href="/city/list/">城市列表(文件)</a></li>

            </ul>

            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">{{ request.session.info.name }} <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">我的资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="/logout/">注销</a></li>
                    </ul>
                </li>
            </ul>
        </div><!-- /.navbar-collapse -->
    </div>
</nav>
<div>
    {% block content %}{% endblock %}
</div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="{% static 'plugins/bootstrap-datetimepicker-master/js/locales/bootstrap-datetimepicker.zh-CN.js' %}"></script>
         {% block js %}{% endblock %}
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

创建子模板
接下来,您可以创建各个页面的子模板,这些模板将继承基本模板并覆盖或扩展其中的块。子模板可以包含特定页面的内容。
说明模板文件:{% extends ‘layout.html’ %}
在{% block content %}{% endblock %}中间部分添加内容
{% block css %}{% endblock %}中间部分添加引用css
{% block js %}{% endblock %}中间部分添加引用js

{% extends 'layout.html' %}
{% block content %}

    <div class="container">
        <div class="panel panel-default" style="margin-top: 20px;">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                批量上传
            </div>
        <div class="panel-body">
            <form method="post" enctype="multipart/form-data" action="/depart/multi/">
                {% csrf_token %}
                <div class="form-group">
                    <input type="file" name="exc">
                </div>
                <input type="submit" value="上传" class="btn btn-info btn-sm">
            </form>
        </div>
        <div style="margin-bottom: 10px"></div>
            <div class="panel-heading">
                <a class="btn btn-success btn-xs " href="/depart/add/">
                    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                    新建部门
                </a>
            </div>

            <!-- Table -->
            <table class="table">
                <thead>
                <tr>
                    <th>id</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <th scope="row">{{ obj.id }}</th>
                        <td>{{ obj.title }}</td>
                        <td>
                            <a href="/depart/{{ obj.id }}/edit/" class="btn btn-primary btn-xs ">编辑</a>
                            <a href="/depart/delete/?nid={{ obj.id }}" class="btn btn-danger btn-xs ">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div><!-- /.container -->

{% endblock %}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

数据库操作

Django开发操作数据库更简单,内部提供了ORM框架

1.安装第三方模块

pip install mysqlclient
pip install --target=提示的路径 requests
7.2ORM的作用:
(1)创建、修改、删除数据库中的表(不用写sql语句,但无法创建数据库)
(2)操作表中的数据(不用写sql语句)

2.自己创建数据库

启动MYSQL数据库,登录并创建

show databases;

create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci ; 
  • 1
  • 2
  • 3

在这里插入图片描述

3.DJango链接数据库

在settings.py上修改,密码是前面设置的密码12345

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "try_orm",
        "USER":'root',
        'PASSWORD':'12345',
        'HOST':'127.0.0.1',
        'POST':3306,
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.DJango操作表中可创建、删除、修改

(1)创建表:在models.py中创建“类”

from django.db import models
# Create your models here.
class UserInfo(models.Model):  #类的名称为UserInfo
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64) #字符串类型
    age = models.IntegerField() #整型类型
#读到类自动生成如下表
# """
# create table app01_userinfo(
#     id bigint auto_increment primary key,
#     name varchar (32),
#     password varchar (64),
#     age int )
# """
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(2)执行命令(前提是app01已注册)
法一:在终端

python manage.py makemigrations

python manage.py migrate
  • 1
  • 2
  • 3

在这里插入图片描述

法二:工具-运行manage.py任务,,在终端依次输入makemigrations migrate
在这里插入图片描述
orm帮忙创建的表
在这里插入图片描述
表创建成功:此后数据库内有刚才创建同数据库名字相同的数据表,内容包含在models.py下定义的类

总结
创建数据库与链接:mysql下创建库,并在settings.py下修改databases
创建表:在app01下的models.py下定义一个类,在终端执行两个命令:
python manage.py makemigrations
python manage.py migrate
在mysql内则自动创建一个与类名相同的表,其内容是类定义时所包含的数据
注意:在表中新增列时,由于已存在列中可能已有数据,所有新增列必须指定新增列的数据
1)手动输入一个值
2)设置默认值(default=2)
3)允许为空(null=True,blank=True)

5.Django操作表中的数据

def orm(request):
    # 1新建
    Department.objects.create(title="运营部")
    Department.objects.create(title="销售部")
    Department.objects.create(title="摆烂部")
    Role.objects.create(caption="海上")
    # 2删除
    Department.objects.filter(id=1).delete()
    Role.objects.all().delete()
    # 3获取数据 data_list=[行,行] QuerySet类型
    data_list =Department.objects.all()
    print(data_list)
    for obj in data_list:
        print(obj.title)
    Department.objects.filter(id=4)
    # 4更新数据
    # Department.objects.all().update(title="部门")
    Department.objects.filter(id=3).update(title="部门")
    return HttpResponse("成功")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/203597
推荐阅读
相关标签
  

闽ICP备14008679号