• Django(出版社功能)


    day62

    day62 2018-05-02
     
    1. 内容回顾
        Django
            1. 安装
                1. Django版本 1.11.xx
                2. 安装方式
                    1. 命令行        --> Python环境(双版本,pip的使用)
                    2. PyCharm安装
            2. 创建Django项目
                1. 创建方式
                    1. 命令行创建方式
                        1. cd到你要保存Django项目的目录
                        2. Django-admin startproject 项目名   --> 会在当前目录创建Django项目
                    2. PyCharm创建方式
                        1. File --> new project --> ...
                        2. 创建完之后一定要选在新窗口打开!!!
            3. 配置Django项目
                1. settings.py文件
                    1. templates文件夹的位置
                    2. 静态文件
                        1. STATIC_URL         --> 静态文件夹的别名(在HTML文件中用的)
                        2. STATICFILES_DIRS   --> 静态文件夹的真正路径
                    3. 注释掉 csrf 相关的中间件
                    4. Django项目连接的数据库信息
            4. Django WEB请求流程(简版)    
                1. 启动Django项目,等待用户连接
                2. 浏览器在地址栏输入URL,来连接我的Django项目
                3. 在urls.py中 找 路径和函数的 对应关系
                4. 执行对应的函数
                5. 返回响应
            5. views.py
                1. 专门用来定义处理请求的函数
                    1. 基本必备三件套
                        from django.shortcuts import HttpResponse, render, redirect
                        1. HttpResponse("要返回的内容")            --> 通常用于直接返回数据
                        2. render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换
                        3. redirect("URL")                         --> 告诉用户的浏览器去访问其他的URL
                
                    2. request相关
                        1. request.method     --> 查看请求的方法
                        2. request.POST       --> 获取POST请求的数据
                        
            6. ORM使用
                1. 什么是ORM?  
                    是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
                    
                2. ORM的本质:
                    类    --->    数据表
                    对象  --->    数据行
                    属性  --->    字段
                    
                    按照规定的语法写,自动翻译成对应的SQL语句.
                    
                3. ORM的功能:    
                    ORM操作数据表
                    ORM操作数据行
                    
                4. Django里ORM的使用:
                    1. 手动创建数据库
                    2. 在settings.py里面,配置数据库的连接信息
                        DATABASES = {
                            'default': {
                                'ENGINE': 'django.db.backends.mysql',
                                'NAME': 'day62',
                                'HOST': '127.0.0.1',
                                'PORT': 3306,
                                'USER': 'root',
                                'PASSWORD': '123456',
                            }
                        }
                    3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库
                        import pymysql
                        pymysql.install_as_MySQLdb()
                    4. 在app/models.py里面定义类
                        # 出版社
                        class Publisher(models.Model):
                            id = models.AutoField(primary_key=True)  # 自增的ID主键
                            # 创建一个varchar(64)的唯一的不为空的字段
                            name = models.CharField(max_length=64, null=False, unique=True)
                    5. 执行两个命令
                        1. python3 manage.py makemigrations   --> 把models.py里面的更改记录到小本本上
                        2. python3 manage.py migrate  --> 把更改翻译成SQL语句,去数据库执行
     

     路径参数,可知删除和编辑的是哪一个ID项。

     登陆、删除和添加过程

     添加页面

    编辑过程

     编辑页面:

    以上内容详细程序

    add_publisher.html

     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>添加出版社</title>
     6     <!--支持移动端适配-->
     7     <meta name="viewport" content="width=device-width, initial-scale=1">
     8 </head>
     9 <body>
    10 
    11 <h1>添加出版社</h1>
    12 <form action="/add_publisher/" method="post">
    13 {#    输入放入publisher_name中#}
    14     <input type="text" name="publisher_name">
    15     <input type="submit" value="提交">
    16     <p style="color: red">{{ error }}</p>
    17 </form>
    18 
    19 </body>
    20 </html>

    edit_publisher.html

     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>编辑出版社</title>
     6     <!--支持移动端适配-->
     7     <meta name="viewport" content="width=device-width, initial-scale=1">
     8 </head>
     9 <body>
    10 
    11 <h1>编辑出版社</h1>
    12 <form action="/edit_publisher/" method="post">
    13     <input type="text" name="id" value="{{ publisher.id }}" style="display: none">
    14 {#    输入放入publisher_name中#}
    15     <input type="text" name="edit_name", value="{{ publisher.name }}">
    16     <input type="submit" value="提交">
    17     <p style="color: red">{{ error }}</p>
    18 </form>
    19 
    20 </body>
    21 </html>

    publisher_list.html

     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>出版社列表</title>
     6     <!--支持移动端适配-->
     7     <meta name="viewport" content="width=device-width, initial-scale=1">
     8 </head>
     9 <body>
    10 
    11 <a href="/add_publisher/">添加新出版社</a>
    12 <table border="1">
    13     <thead>
    14     <tr>
    15         <th>序号</th>
    16         <th>ID</th>
    17         <th>出版社名字</th>
    18         <th>操作</th>
    19     </tr>
    20     </thead>
    21 
    22     <tbody>
    23     {% for publisher in publisher_list %}
    24         <tr>
    25 
    26         <td>{{ forloop.counter }}</td>
    27         <td>{{ publisher.id }}</td>
    28         <td>{{ publisher.name }}</td>
    29 {#        <td>#}
    30 {#            <a class="btn btn-danger" href="/delete_publisher/?id={{ publisher.id }}">删除</a>#}
    31 {#            <a class="btn btn-info" href="/edit_publisher/?id={{ publisher.id }}">编辑</a>#}
    32 {#        </td>#}
    33         <td>
    34 {#            url携带参数的固定写法#}
    35             <a href="/delete_publisher/?id={{ publisher.id }}">删除</a>
    36 {#            /  /   表示在当前网站不同地址间跳转#}
    37             <a href="/edit_publisher/?id={{ publisher.id }}">编辑</a>
    38         </td>
    39         </tr>
    40     {% endfor %}
    41     </tbody>
    42 
    43 </table>
    44 
    45 </body>
    46 </html>

    views.py

     1 from django.shortcuts import render, redirect, HttpResponse
     2 
     3 from app01 import models
     4 # Create your views here.
     5 
     6 def publisher_list(request):
     7     ret = models.Publisher.objects.all().order_by("id")# 按ID排序
     8     return render(request, "publisher_list.html", {"publisher_list": ret})
     9 
    10 def add_publisher(request):
    11     error_msg = ""
    12     if request.method == "POST":
    13         new_name = request.POST.get("publisher_name")
    14         if new_name:
    15             # 去数据库新建记录、
    16             models.Publisher.objects.create(name=new_name)
    17             # 引导用户回到出版社列表页
    18             return redirect("/publisher_list")
    19         else:
    20             error_msg="名字不能为空"
    21 
    22     # error_msg -> error
    23     return render(request, "add_publisher.html", {"error": error_msg})
    24 
    25 def delete_publisher(request):
    26     # 从get中取出将要删除的ID值
    27           #GET得到一个字典  get根据id取值
    28     del_id = request.GET.get("id", None)
    29     # 如果能取到id值
    30     if del_id:
    31         del_obj = models.Publisher.objects.get(id=del_id)
    32         #删除
    33         del_obj.delete()
    34 
    35         return redirect("/publisher_list/")
    36 
    37     else:
    38         return HttpResponse("fucking error")
    39 
    40 def edit_publisher(request):
    41     #如果是post   t提交
    42     if request.method == "POST":
    43         edit_id = request.POST.get("id")
    44         new_name = request.POST.get("edit_name")
    45         # 根据id确定编辑哪一个出版社
    46         edit_publisher = models.Publisher.objects.get(id=edit_id)
    47         edit_publisher.name = new_name
    48         edit_publisher.save()#把修改后的保存
    49 
    50         return redirect("/publisher_list/")
    51 
    52     #如果是get  显示页面时 需需显示待编辑的内容
    53     # 获取到当前编辑的出版社对象   GET
    54     edit_id = request.GET.get("id", None)# None可以默认取不到
    55     if edit_id:
    56         publisher_obj = models.Publisher.objects.get(id=edit_id)
    57         return render(request, "edit_publisher.html", {"publisher": publisher_obj}) #取出来的值传到页面显示
    58     else:
    59         HttpResponse("编辑的出版社不存在!")
    60 def test(request):
    61     print(request.GET)
    62     print(request.GET.get("id"))
    63     return HttpResponse("ok")

    bootstrap美化

      1 <!DOCTYPE html>
      2 <!-- saved from url=(0042)https://v3.bootcss.com/examples/dashboard/ -->
      3 <html lang="zh-CN">
      4 <head>
      5     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      6 
      7     <meta http-equiv="X-UA-Compatible" content="IE=edge">
      8     <meta name="viewport" content="width=device-width, initial-scale=1">
      9     <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
     10     <meta name="description" content="">
     11     <meta name="author" content="">
     12 {#    <link rel="icon" href="https://v3.bootcss.com/favicon.ico">#}
     13 
     14     <title>Dashboard</title>
     15     <!-- Bootstrap core CSS -->
     16     <link href="/static/bootstrap/css/bootstrap.css" rel="stylesheet">
     17     <!-- Custom styles for this template -->
     18     <link href="/static/dashboard.css" rel="stylesheet">
     19     <link rel="stylesheet" href="/static/fontAwesome/css/font-awesome.css">
     20 </head>
     21 
     22 <body>
     23 <nav class="navbar navbar-inverse navbar-fixed-top">
     24     <div class="container-fluid">
     25         <div class="navbar-header">
     26             <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
     27                     aria-expanded="false" aria-controls="navbar">
     28                 <span class="sr-only">Toggle navigation</span>
     29                 <span class="icon-bar"></span>
     30                 <span class="icon-bar"></span>
     31                 <span class="icon-bar"></span>
     32             </button>
     33             <a class="navbar-brand" href="https://v3.bootcss.com/examples/dashboard/#">Project name</a>
     34         </div>
     35         <div id="navbar" class="navbar-collapse collapse">
     36             <ul class="nav navbar-nav navbar-right">
     37                 <li><a href="https://v3.bootcss.com/examples/dashboard/#">Dashboard</a></li>
     38                 <li><a href="https://v3.bootcss.com/examples/dashboard/#">Settings</a></li>
     39                 <li><a href="https://v3.bootcss.com/examples/dashboard/#">Profile</a></li>
     40                 <li><a href="https://v3.bootcss.com/examples/dashboard/#">Help</a></li>
     41             </ul>
     42             <form class="navbar-form navbar-right">
     43                 <input type="text" class="form-control" placeholder="Search...">
     44             </form>
     45         </div>
     46     </div>
     47 </nav>
     48 
     49 <div class="container-fluid">
     50     <div class="row">
     51         <div class="col-sm-3 col-md-2 sidebar">
     52             <ul class="nav nav-sidebar">
     53                 <li class="active"><a href="/publisher_list/">出版社列表页<span class="sr-only">(current)</span></a>
     54                 </li>
     55                 <li><a href="#"></a></li>
     56                 <li><a href="#">Analytics</a></li>
     57                 <li><a href="#">Export</a></li>
     58             </ul>
     59 
     60         </div>
     61         <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
     62             <h1 class="page-header">Dashboard</h1>
     63 
     64             <div class="panel panel-primary">
     65                 <!-- Default panel contents -->
     66                 <div class="panel-heading">出版社列表<i class="fa fa-thumb-tack" aria-hidden="true"></i></div>
     67                 <div class="panel-body">
     68                     <div class="row" style="margin-bottom: 15px">
     69                         <div class="col-md-4">
     70                             <div class="input-group">
     71                                 <input type="text" class="form-control" placeholder="Search for...">
     72                                 <span class="input-group-btn">
     73                                     <button class="btn btn-default" type="button">搜索</button>
     74                                 </span>
     75                             </div><!-- /input-group -->
     76                         </div><!-- /.col-md-4 -->
     77                         <div class="col-md-1 pull-right">
     78                             <button class="btn btn-success" data-toggle="modal" data-target="#myModal">新增</button>
     79                         </div>
     80 
     81                     </div><!-- /.row -->
     82 
     83                     <table class="table table-bordered">
     84                         <thead>
     85                         <tr>
     86                             <th>#</th>
     87                             <th>id</th>
     88                             <th>出版社名称</th>
     89                             <th>操作</th>
     90                         </tr>
     91                         </thead>
     92                         <tbody>
     93                         {% for publisher in publisher_list %}
     94                             <tr>
     95                                 <td>{{ forloop.counter }}</td>
     96                                 <td>{{ publisher.id }}</td>
     97                                 <td>{{ publisher.name }}</td>
     98                                 <td>
     99                                     <a class="btn btn-danger" href="/delete_publisher/?id={{ publisher.id }}">删除</a>
    100                                     <a class="btn btn-info" href="/edit_publisher/?id={{ publisher.id }}">编辑</a>
    101                                 </td>
    102                             </tr>
    103                         {% endfor %}
    104                         </tbody>
    105                     </table>
    106 
    107                     <nav aria-label="Page navigation" class="text-right">
    108                         <ul class="pagination">
    109                             <li>
    110                                 <a href="#" aria-label="Previous">
    111                                     <span aria-hidden="true">&laquo;</span>
    112                                 </a>
    113                             </li>
    114                             <li><a href="#">1</a></li>
    115                             <li><a href="#">2</a></li>
    116                             <li><a href="#">3</a></li>
    117                             <li><a href="#">4</a></li>
    118                             <li><a href="#">5</a></li>
    119                             <li>
    120                                 <a href="#" aria-label="Next">
    121                                     <span aria-hidden="true">&raquo;</span>
    122                                 </a>
    123                             </li>
    124                         </ul>
    125                     </nav>
    126                 </div>
    127 
    128             </div>
    129         </div>
    130     </div>
    131 </div>
    132 
    133 
    134 <div class="modal fade" tabindex="-1" role="dialog" id="myModal">
    135     <div class="modal-dialog" role="document">
    136         <div class="modal-content">
    137             <div class="modal-header">
    138                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
    139                 </button>
    140                 <h4 class="modal-title">用户信息</h4>
    141             </div>
    142             <div class="modal-body">
    143                 <form class="form-horizontal">
    144                     <div class="form-group">
    145                         <label for="inputEmail3" class="col-sm-2 control-label">邮箱</label>
    146                         <div class="col-sm-10">
    147                             <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
    148                         </div>
    149                     </div>
    150                     <div class="form-group">
    151                         <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
    152                         <div class="col-sm-10">
    153                             <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
    154                         </div>
    155                     </div>
    156                 </form>
    157             </div>
    158             <div class="modal-footer">
    159                 <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
    160                 <button type="button" class="btn btn-primary">保存</button>
    161             </div>
    162         </div><!-- /.modal-content -->
    163     </div><!-- /.modal-dialog -->
    164 </div><!-- /.modal -->
    165 
    166 <!-- Bootstrap core JavaScript
    167 ================================================== -->
    168 <!-- Placed at the end of the document so the pages load faster -->
    169 <script src="/static/jquery-3.2.1.min.js"></script>
    170 <script src="/static/bootstrap/js/bootstrap.js"></script>
    171 
    172 </body>
    173 </html>

    结果:

    今日内容
        1. GET请求和POST请求
            都属于HTTP协议规定的请求方法
            
        2. 什么时候用GET请求?
            1. 浏览器想要得到一个HTML页面的时候
            2. 搜索引擎查询关键字的时候       www.sogo.com/web/?query=迪丽热巴 (问号前是路径,问号后是路径参数)
            
        3. 什么时候用POST?
            1. 向后端提交数据
                1. 大段的数据
                2. 包含隐私的数据  用GET方法会在页面上显示,对隐私不安全


                3. 上传文件
                
        4. 实际中GET和POST的应用场景
            1. GET:
                1. 直接在浏览器地址栏输入URL访问网站
                2. a标签
            2. POST:
                1. 登录注册
                2. 修改(新增)大段的数据
                3. 上传文件

  • 相关阅读:
    oracle全文检索笔记
    java命令行运行带外部jar
    xstream对象xml互转
    spring postconstruct
    eclipse tomcat内存设置
    tomcat PermGen space
    springmvc+mybatis如何分层
    maven+springmvc+easyui+fastjson+pagehelper
    eclipse优化配置
    CodeSmith生成Entity时SourceTable.Description换行不注释
  • 原文地址:https://www.cnblogs.com/112358nizhipeng/p/10307497.html
Copyright © 2020-2023  润新知