djjango安装及其 操作命令
一 首先掌握HTTP协议
HTTP四大特性:
1 基于tcp/IP作用在应用层之上的协议
2 基于请求响应
3 无状态(不识别来的用户的状态)
4 无连接(请求完返回响应后就断开)
数据格式:
请求 :
请求首行 GET url HTTP/1.1
请求头(一大堆键值对)
空格(\r\n)
请求体
响应:
同上
响应状态码
1xx :服务器已经收到了你的数据正在处理,你可以继续提交数据
2xx: 请求成功 ,返回响应的数据
3xx :重定向
4xx: 请求不存在(404)
5xx:服务器错误
如何推导Django
借助wsgiref模块帮我处理socket以及http消息的处理
返回一个字符串
返回一个HTML页面
返回HTML页面展示当前时间(HTML文件r模式打开就是一堆字符串,利用字符串替换
完成后端向前端HTML的数据传送)
借助jinja2 帮我们完成模板渲染(后端给HTML页面传输数据)render()
模板语法
{{}}两个大括号 显示变量相关
{%%} 表示逻辑相关 for循环
{{data}}
{{data.name}} 从后端拿到数据
{%for user_dict in user_list%}
{{}user_dict}
{%endfor%}
pymysql 连接数据库
动静态网页
静态网页:数据时写死的,万年不变
动态网页:数据是后台动态获取的,比如数据库的数据
python三大主流web框架
Django (大而全)
flask (小而精)
tronado (异步非阻塞)
Django安装
一:命令行安装
命令行安装
pip install dijango==1.11.11
命令行创建Django项目
django-admin startproject “项目名”
这样创建的Django项目只有一个
一个项目文件夹
__init__
settings
urls
wsgi
manage.pycharm安装
命令行创建APP应用
python manage.py startapp 应用名(app01)
命令行启动Django项目
python manage.py runserver
命令行关闭Django项目
crtl+c
二 种方式安装
pycharm安装
new project 选Django 注意选择你的解释器(本机)可以直接写APP名帮你自动创建一个APP)
应用下
migrations 数据库记录相关
models.py 数据库模型表(orm)
views.py 视图函数(执行相关功能的)
项目名下
__init__.py
settings.py 项目配置文件
urls.py 路由与视图函数
wsgi.py wsgiref相关
manage.py 项目入口文件
必会用的三大功能模块
HttpResponse 回字符串
render 渲染页面并返回
redirect 从定向(可以写别人的网址也可以写自己的路由)
from django.shortcuts import render ,HttpRespose ,redirect
Django中APP的概念:相当于一所大学中的学院
前端页面两种引入外部资源的方式
CDN 内容分发网络
加载本地文件 html文件夹约定俗成的放在templates文件夹下
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
约定俗成的静态文件都在放在static文件夹下
一般情况下static文件夹下建议分成css,js及其他相关文件夹实现分层
django静态文件配置
STATIC_URL = '/static/'
# 静态文件路径配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2'),
] form表单两种提交方式
一种是input type=submit
一种是button按钮 form表单默认是get请求
参数携带方式
http://127.0.0.1:8000/login/?username=jason&password=123
可以通过method参数指定提交方式 action三种指定数据提交路径的方式(******)
1.全路径 :http://127.0.0.1:8000/login/
2.后缀:/login/(推荐用这种)
3.不写:不写默认往当前路径提交 通常情况下视图函数处理的都是get请求
def login(request):
# print('收到了')
# print(request.method)
if request.method == 'POST':
# 专门写post请求所对应的逻辑
return HttpResponse('收到了!')
# 直接写所有get请求所对应的逻辑
return render(request, 'login.html') get请求和post请求 django获取前端请求方式
request.method 获取get请求提交的数据
request.GET 携带了前端所有get请求的数据
username = request.GET.get('username')
password = request.GET.get('password')
取值遵循字典取值 注意虽然它的value是列表但是你取的时候默认取列表最后一个元素 如果想获取列表里面所有的参数需要用
getlist() 重点******* 应用场景 checkbox 多选的select框 获取post请求提交的数据
request.POST 携带了前端所有get请求的数据
username = request.POST.get('username')
password = request.POST.get('password')
取值遵循字典取值 注意虽然它的value是列表但是你取的时候默认取列表最后一个元素 如果想获取列表里面所有的参数需要用
getlist() 重点******* 应用场景 checkbox 多选的select框 ORM
什么是ORM
对象关系映射:
一个类 >>> 数据库的一张表
类的对象 >>> 数据库的一条记录
对象点数据(user_obj.name) >>> 数据库某条记录的某个字段值
优点:
不会写sql的程序员也能很溜的操作数据库
大大提高了开发效率 缺点:
可能sql语句执行效率不高 django连接mysql数据库
1.配置文件注意点:变量名必须全部是大写,否则无效
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test007',
'USER':'root',
'PASSWORD':'123321',
'HOST':'127.0.0.1',
'PORT':3306
}
}
2.使用django orm它不会自动帮你创建库,需要你手动创建
能帮你自动干的事:
自动帮你创建表 **********数据库迁移命令******************
python manage.py makemigrations 这一句命令只是记录一下数据库更改记录
python manage.py migrate 真正去操作数据库 orm查询user表所有数据
models.User.objects.all()
orm查询user表的某条数据
user_queryset = models.User.objects.filter(name=username,password=password)
只有queryset对象才能够点query获取当前queryset对象所对应的sql语句
user_obj.query
# SELECT
# `app01_user`.`id`,
# `app01_user`.`name`,
# `app01_user`.`password`
# FROM
# `app01_user`
# WHERE
# ( `app01_user`.`name` = jason AND `app01_user`.`password` = 123 ) 如果想获取对应的模型表对象,需要通过"索引取值"的方式,回去真正的数据对象
queryset支持正数索引取值,但是不推荐你直接用索引,推荐你用orm给你封装的first()
user_obj = models.User.objects.filter(name=username,password=password).first()
只有取出真正的模板表对象,才能通过点的方式操作对应数据库的某条数据 表字段的增删改
******
只要动了models.py中涉及表的代码,就必须重新执行数据库迁移命令
缺一不可,切顺序不可颠倒
python manage.py makemigrations 这一句命令只是记录一下数据库更改记录
python manage.py migrate 真正去操作数据库 表字段的新增
# 对于已经有数据的表,新增字段的时候,要设置默认值
addr = models.CharField(max_length=32,default='China')
# 或者指定该字段可以为空
phone = models.CharField(max_length=32,null=True) user表数据的增删改查
查:
后端
def userlist(request):
# 查询user表所有数据
user_queryset = models.User.objects.all()
return render(request,'userlist.html',{'user_list':user_queryset}) # 前端可以通过user_list拿到对应的数据
前端
# 模板语法之for循环 循环展示数据 可以直接敲for tab键自动补全for循环语法
{% for user_obj in user_list %}
<tr>
<td>{{ user_obj.id }}</td>
<td>{{ user_obj.name }}</td>
<td>{{ user_obj.password }}</td>
<td>{{ user_obj.addr }}</td>
<td class="text-center">
<a href="/edit_user/?id={{ user_obj.pk }}" class="btn btn-primary btn-sm">编辑</a>
<a href="/delete_user/?id={{ user_obj.id }}" class="btn btn-danger btn-sm">删除</a>
</td>
</tr>
{% endfor %}
删:
def delete_user(request):
# 获取被删除对象的id
delete_id = request.GET.get('id')
# queryset自带delete方法,删除queryset里面所有的数据对象
# queryset调delete()执行的批量操作 删除的是queryset里面所有的数据
affect_rows = models.User.objects.filter(id=delete_id).delete()
print(affect_rows)
return redirect('/userlist')
前端
<a href="/delete_user/?id={{ user_obj.id }}" class="btn btn-danger btn-sm">删除</a>
增:
# 方式1:新增数据操作 返回值就是当前被创建对象本身
# user_obj = models.User.objects.create(name=username,password=password,addr=addr)
# 方式2:
# user_obj = models.User(**request.POST)
# user_obj.save()
改:
思路:先获取到底改哪条数据 查询该数据 渲染到前端页面供用户查看及修改
post请求中获取被修改对象的id两种方式:
1.input隐藏标签
2.action携带参数
<form action="/edit_user/?id={{ edit_obj.pk }}" method="post">
<input type="hidden" value="{{ edit_obj.pk }}" name="id">
<p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.name }}"></p>
<p>password:<input type="password" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
<p>addr:<input type="text" name="addr" class="form-control" value="{{ edit_obj.addr }}"></p>
<input type="submit" class="btn btn-success">
</form>
两种修改数据的方式:
# 修改数据方式1
models.User.objects.filter(id=id2).update(name=username,password=password,addr=addr)
# 修改数据方式2
edit_obj = models.User.objects.filter(id=id2).first()
edit_obj.name = username
edit_obj.password = password
edit_obj.addr = addr
edit_obj.save()
只要是queryset对象就可以连续调用queryset对象对应的方法
models.User.objects.filter().filter().filter().filter().filter() 查询数据的两种方式
models.User.objects.filter() 拿到的是queryset对象
edit_obj = models.User.objects.get(id=edit_id) 拿到的就是数据对象本身(不推荐使用) django请求生命周期 图书管理系统表设计 书籍 >>> 出版社 一对多(注意:外键说法描述只有一对多,没有多对一)
作者 >>> 书籍 多对多
出版社 一对多
publish = models.ForeignKey(to='Publish') # 关联publish表 关联字段默认就是主键id 图书管理系统表相关
class Book(models.Model):
# id不写 默认自动就有 指定的话就用你指定的
name = models.CharField(max_length=32)
# 小数最多8位 小数部分占两位 999999.99
price = models.DecimalField(max_digits=8,decimal_places=2)
# 书籍与出版社是一对多关系 外键字段建在多的一方 orm会自动给这个字段加_id >>>publish_id
publish = models.ForeignKey(to='Publish') # 关联publish表 关联字段默认就是主键id
# 多对多外键字段 建议放在使用频率比较高的那张表里 为后期orm查询提供便利
authors = models.ManyToManyField(to='Author') # 自动帮你创建书籍与作者的关系表 不会在当前表里面创建字段 class Publish(models.Model):
name = models.CharField(max_length=32)
email = models.EmailField()
addr = models.CharField(max_length=32) class Author(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
djjango安装及其 操作命令的更多相关文章
- CentOS 7 之 Docker 安装及操作命令
Docker 安装 官方网站上有各种环境下的安装指南,比如:CentOS.Ubuntu 和 Debian 系列的安装. 而我们现在主要介绍的是基于 CentOS 7.x 上面的安装. 1.查看是否已经 ...
- Docker安装redis操作命令
最近学习了redis,那么今天我们来学习以下在Docker上安装我们的redis,并查看有关redis的一系列命令 查找redis docker search redis 拉取redis docker ...
- Docker入门 安装 基础操作命令
Docker 学习来源 https://www.bilibili.com/video/av26993050/?spm_id_from=333.788.b_636f6d6d656e74.20 https ...
- centos6.7下编译安装lnmp
很多步骤不说明了,请参照本人的centos6.7下编译安装lamp,这次的架构是nginx+php-fpm一台服务器,mysql一台服务器 (1)首先编译安装nginx: 操作命令: yum -y g ...
- Python编程软件的安装与使用——Windows、Linux和Mac
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 最近,有读者透露:Python软件如何安装?为什么自己安装的软件会有各种"奇怪"的问题?据此,本 ...
- elk日志分析平台安装
ELK安装 前言 什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又 ...
- 安装python第三方包
20190822 先说一下,有4种方法(我知道的): 1.源码安装 2.python自带包管理器安装 3.外部包管理器安装 4.whl格式安装 1.源码安装 Python第三方库几乎都可以在githu ...
- nmap 扫描信息收集
1.端口镜像 port Mirroring 功能通过在交换机上或者路由器上,将一个或者多个源端口的数据流量妆发大奥某一个指定的端口来实现对网络的监听,指定端口成为镜像端口或目的端口. 2.ARP攻击捕 ...
- ELK服务基础
官方文档 什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK又称为ELK s ...
随机推荐
- Linux下用户和raid练习题
1. 公司一开发人员申请对服务器10天的oldboy普通用户权限,如何操作? useradd oldboy passwd oldboy usermod -e `date -d "10day& ...
- 原生js设置rem
使用rem是为了界面响应不同尺寸的手机,引入下面的方法就可以使用rem了. setFontSize: function (doc, win) { var docEl = doc.documentEle ...
- Gradle打jar包命令
- Pyspark 使用 Spark Udf 的一些经验
起初开始写一些 udf 的时候感觉有一些奇怪,在 spark 的计算中,一般通过转换(Transformation) 在不触发计算(Action) 的情况下就行一些预处理.udf 就是这样一个好用的东 ...
- C. Multiplicity 简单数论+dp(dp[i][j]=dp[i-1][j-1]+dp[i-1][j] 前面序列要满足才能构成后面序列)+sort
题意:给出n 个数 的序列 问 从n个数删去任意个数 删去的数后的序列b1 b2 b3 ......bk k|bk 思路: 这种题目都有一个特性 就是取到bk 的时候 需要前面有个bk-1的序列前 ...
- css经常使用的六种文本样式
css当中经常使用的六种文本样式 css 文本样式是相对于内容进行的样式修饰,下面来说下几种常见的文本样式. 首行缩进 首行缩进是将段落的第一行缩进,这是常用的文本格式化效果.一般地,中文写作时开头空 ...
- 如何查看C++ dll位数
使用VS自带工具 dumpbin dumpbin /headers xxx.dll
- (BFS) leetcode 279. Perfect Squares
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...
- Luogu_2015 二叉苹果树
题目链接 SB 裸题……就是想随便挂在这里……同样的题还有 Luogu_2014 选课. Luogu_2015 二叉苹果树 #include <queue> #include <cs ...
- Redis配置主从复制
Redis配置主从复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作环境介绍 1>.操作系统环境 [root@node101.yinzhengjie.org.cn ...