初始Django

博客 动态
0 118
优雅殿下
优雅殿下 2022-05-20 00:59:25
悬赏:0 积分 收藏

初始 Django

  • 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
    注册app
  • 编写URL和视图函数对应关系【urls.py】
    URL和视图函数
    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/DELETEprint(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错误信息
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框架
      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.pyDATABASES = {    '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模型创建
ORM模型创建
对应的sql语句为

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

执行命令

python3 manager.py makemigrationspython3 manager.py migrate

注意:app需要提前注册

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

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

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

python3 manager.py makemigrationspython3 manager.py migrate

4. 操作表中的数据

新建 添加数据

from app.models import DepartModel,UserModelDepartModel.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,UserModelUserModel.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 UserModelUserModel.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
  • 函数
posted @ 2022-05-20 00:46 Lin-Grocery 阅读(2) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员