• 【web开发】6、Django(1)


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


    一、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>Titletitle>
        <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>Titletitle>
    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>Titletitle>
         {% 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">
            
            <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 navigationspan>
                    <span class="icon-bar">span>
                    <span class="icon-bar">span>
                    <span class="icon-bar">span>
                button>
                <a class="navbar-brand" href="#">联通用户管理系统a>
            div>
    
            
            <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>
        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;">
                
                <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 class="table">
                    <thead>
                    <tr>
                        <th>idth>
                        <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>
    
    {% 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
  • 相关阅读:
    RBF、GMM、FUZZY
    用keras的cnn做人脸分类
    81. this、call、apply、bind?
    468. 验证IP地址-c语言
    Vue Transition 过渡组件 + animate.style 动画库的使用
    上周热点回顾(2.5-2.11)
    变电站监控视频中异常物检测技术的研究
    淘宝商品sku信息抓取接口api
    前端的算法进阶指南
    I2C3挂载wm8960音频芯片
  • 原文地址:https://blog.csdn.net/qq_46644680/article/details/132767663