码迷,mamicode.com
首页 > 编程语言 > 详细

python-day75--django项目问题详细

时间:2017-11-03 21:44:36      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:多个   表操作   避免   否则   field   code   讲师   conf   变量   

1.项目名要小写

2.表中字段

  AutoField()   表示整形字段,建表时不用写,当整形的数字范围不够你用的时候, 你可以用 BigAutoField()字段, 表示长整形

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

 

python-day75--django项目问题详细

标签:多个   表操作   避免   否则   field   code   讲师   conf   变量   

原文地址:http://www.cnblogs.com/liuwei0824/p/7780361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!