Django 入门 1. 安装Django
2. 创建项目 终端
打开终端
进入某个目录创建项目
执行
1 django-admin startproject 项目名称
django项目中会有一些默认的文件和文件夹,稍后会对其解释
pycharm
特殊说明:
通过命令行创建项目是标准的
pycharm,在标准上加入了一点东西
创建了一个templates目录
添加了templates路径设置
删除[]中内容
默认项目文件:
1 2 3 4 5 6 7 8 9 └─mysite │ manage.py 【项目的管理,启动项目,创建app,数据管理】 │ └─mysite settings.py 【项目配置】 urls.py 【url和函数的对应关系】 wsgi.py 【接受网络请求 同步】 asgi.py 【接受网络请求 异步】 __init__.py
3. APP 1 2 3 4 5 - 项目 - app 【用户管理】【有独立的表结构、函数、html模板、样式表】 - app 【订单管理】 - app 【后台管理】【有独立的表结构、函数、html模板、样式表】 注意:平常开发用不到多个app, 一般只创建一个
创建app:
1 python manage.py startapp app名
app目录文件结构
1 2 3 4 5 6 7 8 9 10 app01 │ admin.py 【默认提供的admin后台管理】 │ apps.py 【固定,勿动】 【app启动入口】 │ models.py 【对数据库 │ tests.py 【单元测试,不懂动】 │ views.py 【视图,url对应的函数写在里面】 │ __init__.py │ └─migrations 【不用动】 【数据库字段变更】 __init__.py
启动和运行Django 快速上手
确保app已注册
4. 模板和静态文件
写一个页面
templates模板 1 2 3 # 去app目录下的templates目录寻找userlist.html (根据app的注册顺序) # 如果settings.py文件中定义了templates dir则先在定义的目录里寻找,之后会去每个app里寻找(注册顺序) return render(request, "user_list.html") # 返回user_list.html文件
静态文件 开发中一般将:
都会当作静态文件处理
在app目录下创建static目录,将以上类型文件放入
1 <img src ="/static/xx.png" alt ="" >
static可创建以下目录结构,将文件分类放入
1 2 3 4 5 static ├─css 【放入样式表】 ├─img 【放入图片】 ├─js 【放入jquery等】 └─plugins 【放入bootstrap等】
django已经提供了static文件夹的引入方式,建议使用以下方式引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 {% load static %} <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Title</title > <link rel ="stylesheet" href =" {% static 'plugins/bootstrap/css/bootstrap.css' %} " </head > <body > <img src =" {% static 'img/xxx.png' %} " alt ="" > <script src =" {% static 'js/jquary.js' %} " ></script > <script src =" {% static 'plugins/bootstrap/js/bootstrap.js' %} " ></script > </body > </html >
模板语法 本质上:在html中写一些占位符,由数据对这些占位符进行替换
模板中python变量的引入
对于python 列表 字典等变量 直接引入可以将其完整显示出来 例如 [‘111’] {“name”: 111}
可迭代变量
通过索引引入部分值 变量.索引值
for循环遍历
字典建取值
字典遍历
条件语句
django数据显示大致原理
5. 请求和响应 获取用户请求
响应内容
重定向
1 2 return redirect("http://baidu.com" ) return redirect("/login/" )
用户登录案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 path('login/' , views.login) def login (request ): if request.method == "GET" : return render(request, 'login.html' ) else : user = request.POST.get("user" ) passwd = request.POST.get("passwd" ) if user == "admin" and passwd == "123" : retun redirect('http://bilibili.com' ) else : return render(request, 'login.html' , {"error_msg" : "错误" })
1 2 3 4 5 6 7 <form mtehod ="POST" action ="/login/" > {% csrf_token %} <input type ="text" name ="user" placehoder ="用户名" > <input type ="password" name ="passwd" placehoder ="密码" > <input type ="submit" value ="提交" > <span style ="color: red;" > {{ error_msg }} </span > </form >
django默认开启csrf token 验证中间件 确保数据安全
模板没有传值则为空
action中的地址与访问地址相同时,可以省略不写
6. 数据库操作 ORM(对象关系映射)
安装第三方模块
orm可以帮助我们做两件事:
创建、修改、删除数据库中的表(无需写sql语句)。 【无法创建数据库】
操作表中的数据。【不用谢sql语句】
手动创建数据库
启动mysql服务
修改root密码
更改鉴权方式
1 2 3 us update user set plugin= 'mysql_native_password' where user = 'root' ;flush privileges;
更改密码
1 ALTER user 'root' @'localhost' IDENTIFIED BY 'root' ;
开启远程链接
1 2 3 update user set host= '%' where user = 'root' ;grant all on * .* to 'root' @'%' ;flush privileges;
创建数据库
1 create database dbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
连接数据库
在settings.py文件中配置
1 2 3 4 5 6 7 8 9 10 DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'django' , 'USER' : 'root' , 'PASSWORD' : 'mima' , 'HOST' : '127.0.0.1' , 'PORT' : '3306' , } }
操作表 在models.py中创建表
1 2 3 4 5 6 7 8 9 10 11 12 13 ''' 创建一个app名_类名表 create table app01_userinfo( id bigint auto_increment primary key, name varchar(32), password varchar(64), age int) ''' class UserInfo (models.Model): name = models.CharField(max_lenth=32 ) password = models.CharField(max_lenth=64 ) age = models.Integerfield()
执行命令:
注:app一定要注册!!
1 2 python manage.py makemigrations python manage.py migrate
查看数据库
1 2 3 4 use django; show tables;desc app01_userinfo;select * from app01_department
修改表:
在表中新增列时,由于存在列中可能已有数据,所以新增列必须要指定默认值或者允许为空,那么你会出现以下问题
选择1可为新增的表添加默认值
选择2可以采用以下方式添加默认值
1 age = models.IntegerField(default=2 )
或者允许为空
1 data = models.IntegerField(null=True , blank=True )
再次执行迁移命令即可
操作表中的数据 新建数据 insert into app01_name(title)values(“ss”)
1 类名.objects.create(列="值" , 列="值" )
删除数据
1 2 3 4 类名.objects.filter (id =3 ).delete() 类名.objects.all ().delete()
获取数据返回列表 [行, 行] QuerySet类型 每一行都是对象
1 2 3 4 5 6 data = 类名.objects.all () for obj in data: print (obj.id , obj.name, obj.password) data = 类名.objects.filter (id =1 ) a = data.first() print (a.id , a.name)
修改数据
1 2 3 4 类名.objects.all ().update(password=999 ) 类名.objects.filter (name="lihua" ).update(password=99 )
补:sql语句
删除表
保存emoji数据,转换编码
1 ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
1 2 3 4 5 6 7 8 9 10 11 12 13 DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'HOST' : '127.0.0.1' , 'PORT' : '3306' , 'USER' : 'root' , 'PASSWORD' : '123456' , 'NAME' : 'mysite' , 'OPTIONS' : {'charset' : 'utf8mb4' }, } }