新建一个Django项目示例--出版社管理系统

时间:2020-04-22
本文章向大家介绍新建一个Django项目示例--出版社管理系统,主要包括新建一个Django项目示例--出版社管理系统使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、创建Django项目 

1. 命令行创建方式
    1. cd到你要保存Django项目的目录
    2. Django-admin startproject 项目名   --> 会在当前目录创建Django项目
2. PyCharm创建方式
    1. File --> new project --> ...
    2. 创建完之后一定要选在新窗口打开!!!

 PyCharm创建Django项目:

二、配置Django项目  

1. settings.py文件
    1. templates文件夹的位置
2. 静态文件
    1. STATIC_URL         --> 静态文件夹的别名(在HTML文件中用的)
    2. STATICFILES_DIRS   --> 静态文件夹的真正路径
3. 注释掉setting.py中 带有 csrf 的那一行(大概45~47行)
4. Django项目连接的数据库信息

1、静态文件配置

2、注释掉setting.py中 带有 csrf 的那一行(大概45~47行)

 3、 Django项目连接的数据库信息

 见下面四、ODR中的 2. 在settings.py里面,配置数据库的连接信息

 三、Django WEB请求流程(简版) 

1. 启动Django项目,等待用户连接
2. 浏览器在地址栏输入URL,来连接我的Django项目
3. 在urls.py中找路径和函数的对应关系
4. 执行对应的函数
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请求的数据

四、ORM使用

1. 什么是ORM? 
    是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
                
2. ORM的本质:
    类    --->    数据表
    对象  --->    数据行
    属性  --->    字段
                
    按照规定的语法写,自动翻译成对应的SQL语句.
                
3. ORM的功能:    
    ORM操作数据表
    ORM操作数据行
                
4. Django里ORM的使用:
    1. 手动创建数据库
    2. 在settings.py里面,配置数据库的连接信息
        DATABASES = {
                'default': {
                                   'ENGINE': jango.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语句,去数据库执行                
流程介绍

1、在cmd中新建一个数据库

 2. 在settings.py里面,配置数据库的连接信息

 3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库

 4、在app/models.py里面定义类(这里以创建一个图书管理系统为例)

 5、 执行两个命令

在pycharm下面的Terminal 中依次执行以下两条命令

1. python3 manage.py makemigrations   #把models.py里面的更改记录到小本本上
2. python3 manage.py migrate  #把更改翻译成SQL语句,去数据库执行

 五、pycharm连接数据库操作

  

 1、展示出版社列表

 (1) 在urls.py中添加一个函数对应关系

  

 (2) 在views中添加对应的函数

from django.shortcuts import render
from app01 import models
# Create your views here.

# 展示出版社列表
def publisher_list(request):
    # 去数据库查出所有的出版社,填充到HTML中,给用户返回
    ret = models.Publisher.objects.all().order_by("id")
    return render(request, "publisher_list.html", {"publisher_list": ret})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>出版社列表</title>
</head>
<body>

<a href="/add_publisher/">添加新的出版社</a>

<table border="1">
    <thead>
    <tr>
        <th>序号</th>
        <th>ID</th>
        <th>出版社名称</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for publisher in publisher_list %}
        <tr>
{#       循环添加序号#}
        <td>{{ forloop.counter }}</td>
{#       循环取出库中的ID#}
        <td>{{ publisher.id }}</td>
{#       循环取出库中的name#}
        <td>{{ publisher.name }}</td>
        <td>
            <a href="/delete_publisher/?id={{ publisher.id }}">删除</a>
            <a href="/edit_publisher/?id={{ publisher.id }}">编辑</a>
        </td>
        </tr>
    {% endfor %}

    </tbody>
</table>
</body>
</html>
publisher_list.html

此时点击运行,在浏览器中输入http://127.0.0.1:8000/publisher_list/就会出现:

 2、添加新的出版社 

<a href="/add_publisher/">添加新的出版社</a> 

  (1) 在urls.py中新添加一个函数对应关系

url(r'^add_publisher/', views.add_publisher),

 (2) 在views中添加对应的函数

# 添加新的出版社
def add_publisher(request):
    error_msg = ""
    # 如果是POST请求,我就取到用户填写的数据
    if request.method == "POST":
        new_name = request.POST.get("publisher_name", None)
        if new_name:
            # 通过ORM去数据库里新建一条记录
            models.Publisher.objects.create(name=new_name)
            # 引导用户访问出版社列表页,查看是否添加成功  --> 跳转
            return redirect("/publisher_list/")
        else:
            error_msg = "出版社名字不能为空!"
    # 用户第一次来,我给他返回一个用来填写的HTML页面
    return render(request, "add_publisher.html", {"error": error_msg})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加出版社</title>
</head>
<body>

<h1>添加出版社</h1>

<form action="/add_publisher/" method="post">
    <input type="text" name="publisher_name">
    <input type="submit" value="提交">
    <p style="color: red">{{ error }}</p>
</form>


</body>
</html>

{#form表单提交数据需要注意的几点:#}
{#1、所有的获取用户输入的都要写到写到form表单里面#}
{#2、method=""#}
{#3、action表示往哪里提交#}
add_publisher.html

 3、删除出版社 

<a href="/delete_publisher/?id={{ publisher.id }}">删除</a> 

 (1) 在urls.py中添加一个函数对应关系

url(r'^delete_publisher/', views.delete_publisher),

 (2) 在views中添加对应的函数

# 删除出版社的函数
def delete_publisher(request):
    print(request.GET)
    print("=" * 120)
    # 删除指定的数据
    # 1. 从GET请求的参数里面拿到将要删除的数据的ID值,这个ID值是点击的时候附加的一个参数,见上面a标签
    del_id = request.GET.get("id", None)  # 字典取值,取不到默认为None
    # 如果能取到id值
    if del_id:
        # 去数据库删除当前id值的数据
        # 根据id值查找到数据
        del_obj = models.Publisher.objects.get(id=del_id)
        # 删除
        del_obj.delete()
        # 返回删除后的页面,跳转到出版社的列表页,查看删除是否成功
        return redirect("/publisher_list/")
    else:
        return HttpResponse("要删除的数据不存在!")

4、编辑出版社 

<a href="/edit_publisher/?id={{ publisher.id }}">编辑</a> 

(1) 在urls.py中添加一个函数对应关系 

url(r'^edit_publisher/', views.edit_publisher),

(2) 在views中添加对应的函数

# 编辑出版社
def edit_publisher(request):
    # 用户修改完出版社的名字,点击提交按钮,给我发来新的出版社名字
    if request.method == "POST":
        print(request.POST)
        # 取新出版社名字
        edit_id = request.POST.get("id")
        new_name = request.POST.get("publisher_name")
        # 更新出版社
        # 根据id取到编辑的是哪个出版社
        edit_publisher = models.Publisher.objects.get(id=edit_id)
        edit_publisher.name = new_name
        edit_publisher.save()  # 把修改提交到数据库
        # 跳转出版社列表页,查看是否修改成功
        return redirect("/publisher_list/")
    # 从GET请求的URL中取到id参数
    edit_id = request.GET.get("id")
    if edit_id:
        # 获取到当前编辑的出版社对象
        publisher_obj = models.Publisher.objects.get(id=edit_id)
        return render(request, "edit_publisher.html", {"publisher": publisher_obj})
    else:
        return HttpResponse("编辑的出版社不存在!")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑出版社</title>
</head>
<body>

<h1>编辑出版社</h1>

<form action="/edit_publisher/" method="post">
    <input type="text" name="id" value="{{ publisher.id }}" style="display: none">
    <input type="text" name="publisher_name" value="{{ publisher.name }}">
    <input type="submit" value="提交">
    <p style="color: red">{{ error }}</p>
</form>


</body>
</html>
edit_publisher.html

原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/12745049.html