python-day75--django项目问题详细
1.项目名要小写
2.表中字段
AutoField() 表示整形字段,建表时不用写,当整形的数字范围不够你用的时候, 你可以用 BigAutoField()字段, 表示长整形
当表内新增有关联关系的字段时,如字段设置默认值会报错,因为对应的表中没有数据,故设置 null=True
3.在视图函数中进行逻辑判断时:简单的逻辑要放在上面
4.在一张表中对多个其他表做FK,M2M时,就要使用 related_name , 否则当其他表的对象反向查询时会不知道找的是哪个字段
5.在一对一的关系中,想要修改一个对象对应的另外一张表中的数据时,首先通过这个对象找到与另外那张表的建立关系的字段,然后在另外那张表中通过这个字段值 filter 出一个QuerySet,再用update方法修改
6.一定要注释,养成习惯
7.对数据库操作时,如果是跨表操作会有性能损耗,所以在一些情况下设计表时可以进行优化 -- choices方法
- 方法一 多对一:
class UserType(models.Model):
"""
用户类型表,记录经常变动
"""
title = models.CharField(max_length=32) class UserInfo(models.Model):
"""
用户表:讲师和班主任
"""
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
email = models.CharField(max_length=32)
ut = models.ForeignKey(to="UserType")
- 方法二 choices:
class UserInfo(models.Model):
"""
用户表
"""
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
email = models.CharField(max_length=32) user_type_choices = ( #choices方法适用于记录不经常变动的
(1, '班主任'),
(2, '讲师'),
) user_type_id = models.IntegerField(choices=user_type_choices)
举例:
多对一方法: """
ID Title
1 图片
2 挨踢1024
3 段子
"""
class NewsType(models.Model):
title = models.CharField(max_length=32) """
ID Title Summary News_Type
1 t.... 科技... 2
2 t.... 科技... 1
3 t.... 科技... 2 """
class News(models.Model):
title = models.CharField(max_length=32)
summary = models.CharField(max_length=255)
news_type = models.ForeignKey(to="NewsType") # 查看所有新闻
new_list = News.objects.all()
for row in new_list:
print(row.title,row.summary,row.news_type.title)
choices方法: """
ID Title Summary News_Type
1 t.... 科技... 2
2 t.... 科技... 1
3 t.... 科技... 2 """
class News(models.Model):
title = models.CharField(max_length=32)
summary = models.CharField(max_length=255) news_type_chices = (
(1,'图片'),
(2,'挨踢1024'),
(3,'段子'),
)
news_type = models.IntegerField(choices=news_type_chices) # 查看所有新闻
new_list = News.objects.all()
for row in new_list:
print(row.title,row.summary, row.get_news_type_display() )
8. session 验证 + 装饰器 + settings 配置
settings 配置 : 在 settings.py 中 自定义 SJF = "user_info" ,注意变量名一定要大写。这样配置后 避免在修改 'user_info' 时 大量的在视图函数中修改,只要在配置文件中改一下就OK了
session 操作 :
1. 先引用 from django.conf import settings
2.设值: request.session[settings.SJF] = {'id':user.id, 'username':user.username}
3.取值: request.session[settings.SJF] 与 request.session.get(settings.SJF) 的区别, 前者取不到值会报错,而后者取不到会返回none
session 装饰器:
def auth(func):
def inner(request,*args,**kwargs):
user_info = request.session.get(settings.SJF)
if not user_info:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner
9.设计表时- 属性相同归类到一张表中 ,如: 讲师 与 班主任
10. uwsgi,wsgi什么区别?
wsgi, 是web服务网关接口,是协议
uwsgi 实现协议的模块
wsgiref 实现协议的模块
11.FK关系
"""
id name
1 n1
2 n2
3 n3
""" class A:
name = xxx """
id title xx_id
1 uu1 2
2 uu2 2
"""
class B:
title = xxxx
xx = FK() # 从B表开始查
data = models.B.objects.filter(title=xxx,xx_id=1,xx__name='xxx')
data = models.B.objects.filter(**{"title":xxx,"xx_id":1,"xx__name":'xxx'})
data = models.B.objects.filter(title=xxx,xx_id=1,xx__name='xxx').values("title",'xx_id','xx__name')
data = models.B.objects.filter(title=xxx,xx_id=1,xx__name='xxx').values_list("title",'xx_id','xx__name') data = models.B.objects.all()
for item in data:
item.tile
item.xx.name # 从A表开始查
data = models.A.objects.all()
for item in data:
item.id,item.name, item.b_set.all() data = models.A.objects.filter() # 3条记录
data = models.A.objects.filter(b__id=2) #1 条记录
data = models.A.objects.filter(b__id=2).values('id','name','b__title') #1条记录 data = models.A.objects.values('id','name','b__title') #4 条记录 !!!!!注意
1 n1 None
2 n2 uu1
2 n2 uu2
3 n3 None
12、如果获取的数据不是直接可以展示的结构
延迟视图函数的数据处理,只有当前端用值的时候才进行处理,性能优化 #方式一:利用类、__iter__、yield实现
class Foo(object):
def __init__(self,data):
self.data = data def __iter__(self):
for item in self.data:
yield item def test(request):
user_list = [
{'id':1,'name':'alex','age':19},
{'id':2,'name':'eric','age':18},
]
obj = Foo(user_list)
return render(request,'test.html',{'user_list':obj}) #方式二:利用生成器函数 --只有当前端用到'user_list'的时候才执行
def test(request):
user_list = [
{'id':1,'name':'alex','age':19},
{'id':2,'name':'eric','age':18},
]
def inner(arg):
for item in arg:
yield {"id":item['id'],"name":item['name'],"age":item['age']} return render(request,'test.html',{'user_list':inner(user_list)})
python-day75--django项目问题详细的更多相关文章
- python 的django项目复制方法
python 的django项目复制方法 django_pyecharts_1修改为django_pyecharts_1_cs1.拷贝项目(确保原有项目是关闭状态下)2.粘贴项目并删除idea文件夹和 ...
- python——创建django项目全攻略(野生程序员到家养程序员的完美进化)
新建工程 我用pycharm写代码,所以一般就用pycharm创建django工程.右上角File-New Project.选择路径,修改项目名称,确定.就可以创建一个新的django工程. ...
- [Python] 建 Django 项目
Python和Django的安装见这里:http://www.runoob.com/django/django-install.html 安装 Django 之后,您现在应该已经有了可用的管理工具 d ...
- python创建Django项目
创建Django项目 关注公众号"轻松学编程"了解更多. 创建一个HelloDjango项目 GitHub地址:https://github.com/liangdongchang/ ...
- 网站开发学习Python实现-Django项目部署-介绍(6.2.1)
@ 目录 1.第一步:找源码 2.第二步:在windows中更改代码 2.第三步:同步到linux中 3.第三步:部署 4.第四步:运行 关于作者 1.第一步:找源码 从github上找一个djang ...
- 使用pycharm 运行python的django项目时报错“Quit the server with CTRL-BREAK.”
Quit the server with CTRL-BREAK.Error: [Errno 10013] 1昨晚测试时还好好的,怎么突然出现这个错误,于是GOOLE,找到个帖子说可能是端口占用了,用工 ...
- Python:Django 项目中可用的各种装备和辅助
1 Redis 数据库 2 MySQL 数据库 3 前端服务器 live-server 4 定时任务 django-crontab扩展 5 Docker 容器 --用来运行 FastDFS 分布式文件 ...
- 网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2)
@ 目录 1.说明 2.思路 3.代码 关于作者 1.说明 之前写的博客都在csdn和博客园中 要将博客同步到自己的博客网站中 因为都是使用markdown格式书写的,所以直接爬取上传就完事 2.思路 ...
- centos部署Django项目的前提工作
从安装python到django项目的部署上线.是相当详细了,中间也没有出现什么幺蛾子.很赞!!! https://blog.csdn.net/u011798443/article/details/8 ...
- 基于Nginx和uWSGI在Ubuntu上部署Django项目
前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...
随机推荐
- HIHOcoder1465 后缀自动机五·重复旋律8
思路 后缀自动机求最长循环串 首先有一个常用的处理技巧,将串复制一遍,长度大于n的子串中就包含了一组循环子串 然后是后缀自动机如何处理最长公共子串的问题 维护两个变量,u和l,u代表当前位置的最长公共 ...
- HIHOcoder 1457 后缀自动机四·重复旋律7
思路 后缀自动机题目,题目本质上是要求求出所有不同的子串的和,SAM每个节点中存放的子串互不相同,所以对于每个节点的sum,可以发现是可以递推的,每个点对子节点贡献是sum[x]*10+c*sz[x] ...
- 如何创建并运行java线程 , 多线程使用
http://www.importnew.com/20672.html https://www.cnblogs.com/wxd0108/p/5479442.html https://www.cnblo ...
- Kubenets 调试cronjob
kubectl exec -ti dvm-dailyreport-debug-deployment-86c55496dc-2mzjz -n alpha /bin/bash # 进入namespace: ...
- 洛谷P2362 围栏木桩----dp思路
在翻dp水题的时候找到的有趣的题0v0 原文>>https://www.luogu.org/problem/show?pid=2362<< 题目描述 某农场有一个由按编号排列的 ...
- 17秋 SDN课程 第一次上机作业
第一题 拓扑: 测试连通性: 第二题 拓扑: 测试连通性: 第三题 拓扑: 测试连通性:
- Jenkins参数化构建(三)之 Jenkins从文件中读取运行参数
安装Extended Choice Parameter插件 选择‘参数化构建过程’ maven command line中进行引用 clean test -DsuiteXmlFile=src/main ...
- 初步:jenkins自动构建安卓Apk
1:本地搭建jenkins 2:下载插件 3:配置相关信息(git,sdk等等) 3:拉取git仓库代码 4:编译执行 参考文章:http://www.cnblogs.com/reblue520/p/ ...
- 小程序学习一 .json 文件配置
微信小程序——配置 以下就是小编对小程序配置的资料进行的系统的整理,希望能对开发者有帮助. 我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置 ...
- 使用cmd命令进行导入
进入cmd直接输入命令 imp 用户名/密码@监听器路径/数据库实例名称 file='d:\数据库文件.dmp' full=y ignore=y 例如: imp mislogin/mislogin@l ...