• Python 知识点:函数,面向对象
  • 前端开发:HTML,CSS,JavaScript,jQuery,BootStrap
  • MySQL 数据库
  • Python 的 WEB 框架
    • Flask:轻量化,第三方组件
    • Django:比较大,集成很多组件,也可以使用第三方组件

1. 安装 Django

pip3 install django==3.2 -i http://mirrors.ai
C:\Python3
- python.exe
- Scripts
- pip.exe # 基于pip可以安装第三方组件
- django-admin.exe # 安装django生成的,【工具,创建django项目】
- Lib
- 内置模块
- sit-packages # 防止第三方安装的模块
- openpyxl
- flask
- Django # 【框架源码】

2. 创建项目

2.1 在终端

  • 打开终端
  • 进入某个目录(项目放在那里)
  • 执行命令创建项目
django-admin startproject 项目名称

2.2 Pycharm

特殊说明

  • 命令行:创建的项目是标准的
  • pycharm:在标准的基础上添加了一些东西
    • 创建了一个templates目录
    • 在settings文件里面加了许多数据:os.path.join 添加了这个模版的位置
├── django_从入门实战     【与项目同名】
│   ├── __init__.py
│   ├── settings.py 【配置文件】 【===常操作===】
│   ├── urls.py 【URL和python函数的对应关系】 【===常操作===】
│   ├── asgi.py 【接收网路请求,不需要修改】 django3 异步
│   └── wsgi.py 【接收网络请求,不需要修改】 同步式的
└── manage.py 【项目的管理,启动项目,创建app,数据管理,不需要修改】 【===常操作===】

3. 创建APP

- 项目
- app,用户管理【表结构,函数,HTML模块,CSS】
- app,订单管理【表结构,函数,HTML模块,CSS】
- app,后台管理【表结构,函数,HTML模块,CSS】
- app,网站 【表结构,函数,HTML模块,CSS】
- app,API 【表结构,函数,HTML模块,CSS】

创建APP

cd <项目地址>
python manage.py startapp app01

生成后的目录结构

├── app01
│   ├── __init__.py
│   ├── admin.py 【固定,不用动】 django默认提供了admin后台管理
│   ├── apps.py 【固定,不用动】 app启动类
│   ├── migrations 【固定,不用动】 数据库变更记录
│   │   └── __init__.py
│   ├── models.py 【重要】,对数据库进行操作的
│   ├── tests.py 【固定,不用动】 单元测试
│   └── views.py 【重要】,视图函数
├── django_从入门实战
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.pyc
│   │   └── settings.cpython-39.pyc
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py 【 URL --> 函数 】
│   └── wsgi.py
└── manage.py

4. 快速上手

  • 确保APP已注册【settings.py】
    在setting文件中注册app

    INSTALLED_APPS=[
    'app01.apps.App01Config'
    ]

    注册app
  • 编写URL和视图函数对应关系【urls.py】

    URL和视图函数
  • 编写视图函数

    视图函数
  • 启动django项目
    • 通过命令行启动
    python manage.py runserver
    • Pycharm启动

4.1 HttpResponse

返回字符串:reutrn HttpResponse("欢迎页面")

4.2 templates模版(render)

返回一个模版或者html页面,需要使用render.
python # 1. 在settings设置了DIRS参数,优先去项目根目录的templates寻找 # 2. 根据app的注册顺序,在每个app下的templates目录找 # 3. 如果settings没有设置DIRS,默认在当前目录下的templates寻找 return render(request, "user_list.html")

4.3 静态文件

一般将css,js,image,或者插件都会当作静态文件处理。
静态文件放置的位置:app目录下的static目录里面
目录结构:

```text
├── app01
│   ├── static
│   │   ├── css
│   │   ├── img
│   │   ├── js
│   │   └── plugins
```

静态文件的引用的写法

```html
{% load static %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>This is a user_list</title>
<link rel="stylesheet" href="{% static 'plugins/...../....css' %}">
</head>
<body>
<h1>这是用户列表</h1>
<script src="{% static 'js/xxx.js' %}"></script>
<script src="{% static 'css/xxx.css' %}"></script>
</body>
</html>
``` ![静态文件引用](https://oss.moniter.top/uPic/2022-03-28/NjJYP8.png)

5. 模版语法

本质上:在HTML中写一些占位符,有数据对这些占位符进行替换和处理
模块的用法:

  • 获取单独的一个值:{{ n1 }}. 引用函数里面的变量
  • 获取列表的值{{ n2.0 }}. 引用函数里面的列表的索引
  • 获取字典的值{{ n3.key }}. 引用函数里面的字典的key
  • 模版中的循环语句
{#列表循环#}
<div>
{% for item in n2 %}
<span>{{ item }}</span>
{% endfor %}
</div> {#字典循环#}
<ur>
{% for item in n3.values %}
<li>{{ item }}</li>
{% endfor %}
</ur> <ur>
{% for item in n3.keys %}
<li>{{ item }}</li>
{% endfor %}
</ur> <ur>
{% for key,value in n3.items %}
<li>{{ key }}:{{ value }}</li>
{% endfor %}
</ur> {#列表里面套字典循环#}
{{ n4.1 }}
{{ n4.1.name }}
{{ n4.1.role }}
{% for item in n4 %}
<div>{{ item.name }}:{{ item.age }}:{{ item.role }}</div>
{% endfor %}
  • 模版中的条件语句
{% if n1 == "zhang" %}
<div>yes</div>
{% else %}
<div>no</div>
{% endif %}

案例

6. 请求和响应

  • request:是一个对象,封装了用户发送过来的所有请求相关数据
# 1.获取请求方式 GET/POST/PUSH/DELETE
print(request.method) # 2. 在URL上传递一些值
print(request.GET) # 3. 通过请求体提交数据
print(request.POST) # 4. 【响应】HttpResponse("返回内容") 将字符串内容返回给请求体
# return HttpResponse("返回内容") # 5.【响应】使用render,读取HTML内容 + 渲染 --> 字符串 返回给用户数据
# return render(request, 'something.html', {"title": "来了"}) # 6.【响应】 redirect()返回:让浏览器重定向到其他页面
return redirect("https://www.baidu.com")

关于重定向。
用户发送请求到网站,网站返回一个网址给浏览器,浏览器在去访问获得的地址进行访问

在Django进行表单的时候存在下面的报错


CSRF错误信息

问题原因:在Django中存在一个CSRF的校验
解决方法:在网页的表单前面加入`{% csrf_token %}
例子如下

<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<input type="submit" value="提交"/>
</form>

7. 数据库操作

  • MySQL数据库 + pymysql
  • pymysql集合到Django或者Flask都是可以的
  • 但是在Django中,一般不会用pymysql去操作数据库
  • Django开发中,操作数据库一般使用的是:内部提供的ORM框架
    • ORM框架的简单示意图


      ORM框架

7.1 安装第三方模块

pip3 install mysqlclient

7.2 ORM

ORM 可以帮助我们做的两件事

  • 创建修改和删除数据库中的表(不用写SQL语句) 【无法创建数据库】
  • 操作表中的数据,不用写SQL语句

1. 创建数据库

步骤:

  • 启动MySQL服务(命令行,其他第三方软件)
  • 创建数据库
create database django_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

2. django连接数据库

在settings.py文件中进行配置和修改

# settings.py
DATABASES = {
'default':{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_day15', # 数据库名字
'USER': 'root',
'PASSWORD': 'wlh10261003',
'HOST': '119.29.100.160',
'PORT': '3306'
}
}

3. django操作数据库

  • 创建表
  • 删除表
  • 更新表

在models.py里面创建ORM模型


ORM模型创建

对应的sql语句为

create table app01_usermodel(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
)

执行命令

python3 manager.py makemigrations
python3 manager.py migrate

注意:app需要提前注册

在表中新增列时,由于表中已经存在数据,所以在新增列必须要指定新增列对应的数据

  1. 手动输入一个值
  2. 设置默认值
age = models.IntegerField(default=0)
  1. 设置允许为空
age = models.IntegerField(null=True,blank=True)

在开发中对表结构进行调整,只需要在models中操作类即可,然后执行下面的命令

python3 manager.py makemigrations
python3 manager.py migrate

4. 操作表中的数据

新建 添加数据

from app.models import DepartModel,UserModel
DepartModel.objects.create(title="运维部")
DepartModel.objects.create(title="运营部")
DepartModel.objects.create(title="研发部")
DepartModel.objects.create(title="人力资源部")
UserModel.objects.create(name="张三",password="123456",age=26)
UserModel.objects.create(name="李四",password="123456",age=37)
UserModel.objects.create(name="王五",password="123456")

删除 数据

from app.models import DepartModel,UserModel
UserModel.objects.filter(id=1).delete()
UserModel.objects.all().delete()
DepartModel.objects.all().delete()

筛选/获取 数据

from app.models import UserModel
# 得到的是一个QuerySet类型,就是[对象,行,行]
data_list = UserModel.objects.all() # 获取所有
for obj in data_list:
print(obj.name,obj.password,obj.age) # 通过下面的方式也是获取的一个QuerySet的类型数据 [对象,]
data_list = UserModel.objects.filter(id=5)
print(data_list) # 可以通过下面的方式,直接获取一个查询到的对象
data_object = UserModel.objects.filter(id=5).first()
print(data_object)
print(data_object.name, data_object.password, data_object.age)

查询筛选数据

更新数据

from app.models import UserModel
UserModel.objects.all().update(password="999")
UserModel.objects.filter(id=4).update(age=54)

案例:用户管理

1. 展示用户列表

  • url
  • 函数
    • 获取所有用户列表
    • 渲染

具体代码实例

  • info_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户管理</title>
</head>
<body>
<h1>INFO 列表</h1>
<a href="/info/add">添加用户</a>
<table border="1">
<thread>
{# tr:表示行#}
<tr>
<th>ID</th>
<th>用户</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thread>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{ obj.id }}</td>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
  • views.info_list

  • urls.py

2. 添加用户

  • url
  • 函数
    • GET:看到页面,
    • POST:提交,写入到数据库

3. 删除用户

  • url
  • 函数

初始 Django的更多相关文章

  1. 初始Django

    Django概述 Django是什么 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C. Django的主要目标是使得开发复杂的 ...

  2. Django 00-socket、wsgi及初始django学习心得

    HTTP基本原理1.http简述:http协议永远都是客户端发起请求,服务端回送请求.客户端和服务端本质上是一个socket客户端和服务端,http协议可以说是基于socket的再上层封装2.http ...

  3. [oldboy-django][1初始django]后台管理页面的布局 + djano母版(继承html)

    完善学员管理系统 - bootstrap fontawesome - 分页,路径导航,表格(class样式),消息图标(i标签),邮件图标(i标签) - 响应式导航 @media(min-width, ...

  4. [oldboy-django][1初始django]web框架本质 + django框架 + ajax

    web框架本质 浏览器(socket客户端) - 发送请求(ip和端口,url http://www.baidu.com:80/index/) - GET 请求头(数据请求行的url上: Http1. ...

  5. [oldboy-django][1初始django]昨日回顾

    1 web框架的本质:socket客户端和服务端通信,socket遵循http协议(短连接,无状态),规定了数据格式(消息头,消息体):传输的数据本质上是字符串 2 django: django安装( ...

  6. 初始Django—Hello world

    1. 准备环境 > python -V Python > pip -V pip from c:\python3\lib\site-packages\pip (python 3.7) > ...

  7. [oldboy-django][1初始django]模态对话框 + 动态加载gif (多对多数据库表)

    ajax+对话框(多对多) - 遮罩层,动态加载gif层,对话框层, a.一点击添加,绑定事件: - 出现遮罩层和动态gif层 - ajax向后台发送请求获取所有班级数据 - success,隐藏动态 ...

  8. Django1.8教程——从零开始搭建一个完整django博客(一)

    第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...

  9. Django学习笔记(4)——Django连接数据库

    前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...

随机推荐

  1. 外部晶振的使用原因与内部RC振荡器的使用方法

    原因一 早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了.这个问题主要还是实用性和成本决定的.   原因二 芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是 ...

  2. [译]HTML&CSS Lesson5: 定位

    CSS最大的用处之一就是可以将内容和元素定位到任何我们想要的位置,使我们的设计具有结构,使内容更加易懂. CSS有好几种不同的定位属性,每种都有自己的使用场景.在这节课中我们会通过不同的案例--可复用 ...

  3. 左手Cookie“小甜饼”,右手Web Storage

    目录 1. Web Storage 2. Cookie机制 3. 二者的联系与区别 1.Web Storage 1.1 概述 Web Storage是HTML5提供的一种新的浏览器端数据储存机制,它提 ...

  4. 用css动态实现圆环百分比分配——初探css3动画

    最近的小程序项目有个设计图要求做一个圆环,两种颜色分配,分别代表可用金额和冻结金额.要是就直接这么显示,感觉好像挺没水平??于是我决定做个动态! 在mdn把新特性gradients(渐变).trans ...

  5. 前端系列——React开发必不可少的eslint配置

    项目需要安装的插件 "babel-eslint": "^8.0.3", "eslint": "^4.13.1", &qu ...

  6. Java中使用最频繁及最通用的Java工具类

    在Java中,工具类定义了一组公共方法,Java中使用最频繁及最通用的Java工具类. 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.so ...

  7. JS函数传递参数是是按值传递

    JavaScript在传参的时候只有一种传递方法那就是按值传递(来自红宝书第四版本) 函数在传递参数的时候会把实参的值拷贝过来一份,而基础类型数据值是存在内存中,在拷贝的时候会复制出来一份,而引用类型 ...

  8. vue Element验证input提示

    <el-form-item prop="userName" class="userName_color"> <b>详细地址<i c ...

  9. 基于Apache Hudi和Debezium构建CDC入湖管道

    从 Hudi v0.10.0 开始,我们很高兴地宣布推出适用于 Deltastreamer 的 Debezium 源,它提供从 Postgres 和 MySQL 数据库到数据湖的变更捕获数据 (CDC ...

  10. Spring Boot-@Conditional注解以及衍生注解@ConditionalOnBean

    @Conditional:判断@Conditional指定的条件是否成立,如果成立才会给容器中添加组件,配置类里面的内容才会生效 我们发现有很多的自动配置类,但是这些自动配置类都有指定的条件,必须满足 ...