文章目录
- 一.安装
- 二.创建项目
- 三.项目介绍
- 四.APP的创建
- 五.小案例
- 六 模板和静态文件
- 模板
- 静态文件
- 7.模板语法
- 7.1 变量
- 7.2列表
- 7.3 字典
- 7.4 过滤器
- 7.5 if/else
- 7.6 for标签
- 7.7 ifequal和ifnotequal
- 7.8注释
- 7.9csrf_token
- 8.模板继承
- 8.1父模板
- 8.2 子模板
- 9.请求和响应
- 10.数据库
- 10.1安装第三方模块
- 10.2 创建数据库
- 10.3 Django连接数据库
- 10.4 类创建表
- 10.5 增删改查
一.安装
pip install djiango
安装完后的库结构。
-Scripts
~~~~ -Django-admin.exe
-Lib
~~~~ -内置模块
~~~~ -site-packages
~~~~~~~~ -django
(注意:Django-admin为管理工具)
二.创建项目
删除一行默认的代码:
三.项目介绍
project_django
~~~~ - __init__.py
~~~~ -asgi.py ~~~~~~~~ 接收网络请求(不需要修改)
~~~~ -settings.py ~~~~~~~~ 项目配置
~~~~ -urls.py ~~~~~~~~ url和函数的对应关系
~~~~ -wsgi.py ~~~~~~~~ 接收网络请求(不需要修改)
manage.py ~~~~~~~~ 项目的管理,启动,创建APP,数据管理
四.APP的创建
python manage.py startapp app_1
APP结构:
├─app_1
│ │ admin.py [固定,不用动]django默认提供了admin后台管理
│ │ apps.py [固定,不用动]app启动类
│ │ models.py 对数据库进行操作
│ │ tests.py 单元测试
│ │ views.py 函数
│ │ __init__.py
│ │
│ └─migrations 数据库变更记录
│ __init__.py
│
五.小案例
1.注册APP【settings】
找到这个类
将这个类的地址写到INSTALLED_APPS
2.编写url和视图函数的对应关系【urls】
之后,如访问www.xxx.com/index,则转去执行views.index中的函数
3.编写视图函数【view.py】
4.启动django
方法一:命令行
python manage.py runserver
方法二:Pycharm启动
5.浏览器访问
六 模板和静态文件
模板
在app_1的下面写一个文件名为templates的模块,里面存放html文件
使用render返回html文件
静态文件
静态文件包括 css ,js, 图片等。
这样就可以引入样式
注意特殊语法:
<% load static%>
<link rel="stylesheet" href="{%static'plugins/css'%}"/>
7.模板语法
视图函数render内部
- 读取含有模板语法的html
- 内部进行渲染,模板语法执行并且替换数据
- 返回渲染后的结果
7.1 变量
view.py:
def test_templates(request):
my_name = "jack"
return render(request, "test_templates.html", {"name": my_name})
html:
<p>name:{{ name }}</p>
7.2列表
view.py
def test_templates(request):
my_list = ["jack", "rose"]
return render(request, "test_templates.html", {"name_list": my_list})
html
<body>
<div>
<p>name:{{ name_list }}</p>
</div>
<div>
<p>name2:{{ name_list.0 }}</p>
<p>name3:{{ name_list.1 }}</p>
</div>
</body>
7.3 字典
view.py
def test_templates(request):
my_dict = {
"name": "jack",
"age": "20",
"height": "178"
}
return render(request, "test_templates.html", {"dict": my_dict})
html
<body>
<div>
<p>all:{{ dict }}</p>
<p>name:{{ dict.name }}</p>
<p>age:{{ dict.age }}</p>
<p>height:{{ dict.height }}</p>
</div>
</body>
7.4 过滤器
模板语法
{{ 变量名 | 过滤器:可选参数 }}
view.py
def test_templates2(request):
name = "JACK AND ROSE"
return render(request, "test_templates2.html", {"my_name": name})
html
<body>
<div>
<p>{{ my_name }}</p>
<p>{{ my_name | lower}}</p>
</div>
</body>
过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|upper }}
- addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
- date:按指定的格式字符串参数格式化 date 或者 datetime 对象
- lenght:返回变量的长度。字典返回的是键值对的数量,集合返回的是去重后的长度。
- safe:将字符串标记为安全,不需要转义。
- default:default 为变量提供一个默认值。
如果 views 传的变量的布尔值是 false,则使用指定的默认值。
以下值为 false:
0 0.0 False 0j "" [] () set() {} None
7.5 if/else
{% if condition %} ... display {% endif %}
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
7.6 for标签
遍历列表
{% for i in views_list %} {{ i }} {% endfor %}
遍历字典
{% for i,j in views_dict.items %} {{ i }}---{{ j }} {% endfor %}
在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号。
forloop.counter: 顺序获取循环序号,从 1 开始计算
forloop.counter0: 顺序获取循环序号,从 0 开始计算
forloop.revcounter: 倒序获取循环序号,结尾序号为 1
forloop.revcounter0: 倒序获取循环序号,结尾序号为 0
forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False7.7 ifequal和ifnotequal
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
7.8注释
{# #}
7.9csrf_token
csrf_token 用于form表单中,作用是跨站请求伪造保护。
8.模板继承
8.1父模板
{% block 名称 %} 预留给子模板的区域,可以设置设置默认内容 {% endblock 名称 %}
8.2 子模板
{% extends "父模板路径"%}
{ % block 名称 % } 内容 {% endblock 名称 %}
9.请求和响应
10.数据库
10.1安装第三方模块
pip install mysqlclient
10.2 创建数据库
1.ORM的功能:
- 创建,修改,删除数据库中的表【无法创建数据库】
- 对数据库中的表进行操作
2.启动mysql
3.创建数据库create database django_database DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
10.3 Django连接数据库
10.4 类创建表
相当于在数据库中创建表app01_userinfo,即等同于下面代码:""" create table app01_userinfo( id bigint auto_increment primary key, name varchar(32), password varchar(64), age int ) """
执行运行命令:
python manage.py makemigrations
python manage.py migrate
修改表结构 -----> 直接修改表model.py文件
如果添加新的字段,没有添加默认值会出现下面情况:
选择1的话,会出现让你输入一个默认值给新的整一列。
选择2的话,会退出,让你直接修改model.py文件。设置默认值
age = models.IntegerField(default=2)
允许为空
age = models.IntegerField(null=True, blank=True)
10.5 增删改查
- 增
UserInfo.objects.create(name="小明", password="123", age="19", email="xiaoming.gmail.com")
- 删
UserInfo.objects.filter(id=4).delete()
UserInfo.objects.all().delete()
- 改
UserInfo.objects.filter(id=5).update(email="999999")
- 查
data_list = UserInfo.objects.all() for item in data_list: print(item.name, item.password, item.age, item.email)
作者:Beyong
出处:Beyong博客
github地址:https://github.com/beyong2019
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。