python生成requirements.txt项目依赖环境
进入python 项目目录下,执行命令
pip freeze > requirements.txt
生成的requirements.txt 里面就记录了当前所有已经安装的依赖包以及版本号
然后将生成的requirements.txt 拷贝到需要安装同样依赖环境的服务器上
最后执行命令
pip install -r requirements.txt
就可以将所有依赖一次安装完成
django中所有的命令
下载django
pip install django==1.11.25 -i 源
创建django项目
django-admin startproject 项目名
启动项目
切换到项目目录下
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0::80 # 0.0.0.0::80
创建app
python manage.py startapp app名称
数据库迁移的命令
python manage.py makemigrations # 检测已经注册app下的models变更记录
python manage.py migrate # 将变更记录同步到数据库中
request
request.POST # POST提交的数据 {} urlencode编码
request.GET # url上携带的参数 ?id=1 {id:1}
request.method # 请求方法 GET POST
request.path_info # 路径信息 不包含IP和端口 也不包含查询参数
request.FILES # 上传的文件 enctype='form-data'
request.session # {} session
request.COOKIES # cookie
request.META # 请求头的信息 HTTP_ 小写——》 大写 - ——》 _
request.body # 请求体 原始数据
request.get_full_path() # 完整的路径信息 不包含IP和端口 包含查询参数
request.is_ajax() # 是否是ajax请求
request.get_signed_cookie(key,salt,defalut='')
response
HttpResponse('字符串') # 字符串
JsonResponse({}) JsonResponse([],safe=False)
render(request,'模板文件的路径',{}) # 返回页面 已经替换好了
redirect('地址或者URLname') # 重定向 响应头Location:地址 301 302
TemplateResponse(request,'模板文件的路径',{}) # 后续在调用render方式进行渲染
ORM
正向查询
有关联关系的哪一方成为正向--也就是多的哪一方 -- 属性查询
反向查询
没有关联关系的哪一方成为反向--也就是一的哪一方 -- 表名小写
正向和反向查询
正向 ----> 关联字段在当前表中,从当前表向外查叫正向
反向 —> 关联字段不在当前表中,当当前表向外查叫反向
正向通过字段,反向通过表名查
一对一 OneToOneField
# 一个文章详情表一对一关联文章表,相当于Foreignkey 加unique
class Article(models.Model):
nid = models.AutoField(primary_key=True)
desc = models.CharField(max_length=255)
class ArticleDetail(models.Model):
"""
文章详情表
"""
nid = models.AutoField(primary_key=True)
content = models.TextField()
article = models.OneToOneField(to="Article", to_field="nid",on_delete=models.DO_NOTHING)
正向:
1、基于对象:obj.(外键).属性
ArticleDetail_obj = models.ArticleDetail.objects.filter(pk=pk).first()
ArticleDetail_obj.article.desc
2、基于字段跨表查询:外键__属性
models.ArticleDetail.objects.filter(pk=2).values("article__desc")
反向:从详情查文章
1、基于对象:obj.(表名小写).属性
article_obj = models.Article.objects.filter(pk=pk).first()
article_obj.articledetail.content
2、基于字段跨表查询:表名小写__属性
models.Article.objects.filter(id=1).values('articledetail__content')
一对多 ForeignKey
book – > publish :一个出版社有多个书
class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=32)
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField( max_length=32)
# 与Publish建立一对多的关系
publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
正向:
1、基于字段:obj.(外键).属性
book_obj = models.Book.objects.filter(title='红楼梦').first()
book_obj.publish.name
反向:obj.(表名小写_set).all()
1、set查询
publish_obj=models.Publish.objects.filter(name="教育").first()
books = publish_obj.book_set.all()
for book in books:
print(book.title)
多对多 ManyToManyField
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=32)
age=models.IntegerField()
# 与AuthorDetail建立一对一的关系
authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=32)
age=models.IntegerField()
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
authors=models.ManyToManyField(to='Author',)
正向:
1、基于字段:obj.(外键).all()
book_obj = models.Book.objects.filter(title="python教程").first()
authors = book_obj.authors.all()
for author in authors:
print(author.name,author.age)
反向:obj.(表名小写_set).all()
1、set查询
author_obj = models.Author.objects.filter(name="moke").first()
books = author_obj.book_set.all()
for book in books:
print(book.title)
2、related_name查询
author_obj.related_name.all()
常用字段
AutoField 自增 primary_key = True主键
IntegerField 整形 -21亿 - 21亿
BooleanField 布尔值类型
NullBooleanField 可以为空的布尔值
CharField 字符串
TextField 文本类型
DateTimeField 日期+加时间
DateField 日期格式
TimeField 时间格式
FloatField 浮点型
DecimalField(max_difits=6,decimal_piaces=3) 十进制小数
字段参数
null = True 数据库中该字段可以为空
black = True 用户输入可以为空
default 默认值
db_index=True 索引
unique 唯一约束
verbose_name 显示的名称
choices 可选择的参数
必知必会十三条
返回对象列表 QuerySet
all() 所有的对象
filter() 获取满足条件的所有对象
exclude() 获取不满足条件的所有对象
order_by() 排序 -
reverse() 反转
values() [ {} ]
values_list() [ () ]
distinct() 去重 不能按照字段去重
返回对象
get() 获取有且唯一的对象
first()
last()
返回数字
count
返回布尔值
exists()
单表的双下划线
字段__条件
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in= [] 成员判断
__range = [3,6] 范围 3-6
__contains ='' 包含 like
__icontains ='' 忽略大小写
__startswith ='' 以什么开头
__istartswith ='' 以什么开头
__endswith ='' 以什么结尾
__endswith ='' 以什么结尾
__year ='2019'
__isnull = True 字段值为null