Django模型——CRUD的练习代码

12 篇文章 0 订阅

分享一下,本人练习模型的增删改查CRUD的代码,欢迎一起讨论和指正。

from datetime import datetime

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from weibo.models import WeiboUser, Weibo


def insertUsers(request):
    '''循环新增数据'''
    WeiboUser.objects.get_or_create(username='ANTHONY', password='123456', nickname='huidian')
    for i in range(20):
        # get_or_create返回的不是对象,而是元组tuple,两个元素,一是对象,二是判断是获取还是新增
        user = WeiboUser.objects.get_or_create(username='ANTHONY{}'.format(i), password='123456',
                                               nickname='huidian{}'.format(i))
        Weibo.objects.get_or_create(user=user[0], content='test data', sourse='script')
    return HttpResponse('insert data done')


def updateUser(request):
    '''批量修改数据'''
    # WeiboUser.objects.all().update(password='a123456')

    user_list1 = WeiboUser.objects.filter(username__endswith='6')
    user_list1.update(status='2')
    WeiboUser.objects.filter(username__endswith='3').update(status='3')
    WeiboUser.objects.filter(username__iendswith='ONY').update(status='4')
    WeiboUser.objects.filter(username__endswith='9').update(status='2')

    return HttpResponse('update data done')


def page_user(request, page_num):
    '''分页练习'''
    page_size = 10
    paginator = Paginator(WeiboUser.objects.all().order_by('id'), page_size)
    print('用户总数:', paginator.count)
    print('每一页的数量:', paginator.per_page)
    print('总页数:', paginator.num_pages)
    # 一定注意,代码里的范围都是包前不包后的
    print('页码范围:', paginator.page_range)
    try:
        page = paginator.page(page_num)
        print('是否有下一页:', page.has_next())
        print('是否有上下页:', page.has_other_pages())
        print('是否有上一页:', page.has_previous())
        print('数据列表:', page.object_list)
        print('下一页的页码:', page.next_page_number())
        print('上一页的页码:', page.previous_page_number())
    except PageNotAnInteger:
        # 这两个错误码得记住
        print('输入的非整型,页码只能为整数。')
    except EmptyPage:
        print('该页码没有数据。')
    return HttpResponse('test Paginator')


def filterUsers(request):
    '''过滤器'''
    user_list = WeiboUser.objects.all()
    print('测试__contains,username中包含“ONY”的数据:', user_list.filter(username__contains='ONY'), '数量为:',
          user_list.filter(username__contains='ONY').count())
    print('测试__icontains,username中包含“ONY”的数据:', user_list.filter(username__icontains='ONY'), '数量为:',
          user_list.filter(username__icontains='ONY').count())
    print('特别注意:contains只匹配给的字符串,icontains忽略大小写')
    print('--------------------------------------------------------')
    print('测试__startswith,username以“张”开头的数据:', user_list.filter(username__startswith='张'), '数量为:',
          user_list.filter(username__startswith='张').count())
    print('测试__istartswith,username以“ant”开头的数据:', user_list.filter(username__istartswith='ant'), '数量为:',
          user_list.filter(username__istartswith='ant').count())
    print('测试__endswith,username以“0”结尾的数据:', user_list.filter(username__endswith='0'), '数量为:',
          user_list.filter(username__endswith='0').count())
    print('测试__iendswith,username以“ONY”结尾的数据:', user_list.filter(username__iendswith='ONY'), '数量为:',
          user_list.filter(username__iendswith='ONY').count())
    print('--------------------------------------------------------')
    print('测试__in,status为3,4的数据:', user_list.filter(status__in=(3, 4)), '数量为:',
          user_list.filter(status__in=(3, 4)).count())
    print('测试__gt,status大于3的数据:', user_list.filter(status__gt=3), '数量为:', user_list.filter(status__gt=3).count())
    print('测试__gte,status大于等于3的数据:', user_list.filter(status__gte=3), '数量为:', user_list.filter(status__gte=3).count())
    print('--------------------------------------------------------')
    print('-----------------------时间练习-------------------------')
    print('----------------------重点重点重点--------------------------')
    # now = datetime.now().date()
    # print(now)
    print('测试__day,创建时间为20号的数据:', user_list.filter(create_time__day=20), '数量为:',
          user_list.filter(create_time__day=20).count())
    print('测试__month,创建时间为3月份的数据:', user_list.filter(create_time__month=3), '数量为:',
          user_list.filter(create_time__month=3).count())
    print('测试__year,创建时间为2018年的数据:', user_list.filter(create_time__year=2018), '数量为:',
          user_list.filter(create_time__year=2018).count())
    date = datetime(2019, 7, 6)
    print('自定义的时间为:', date)
    print('测试时间的比较大小,在2019-7-6之后创建的数据:', user_list.filter(create_time__gt=date), '数量为:',
          user_list.filter(create_time__gt=date).count())

    print('-------------------------------------------------------')
    print('----------------------关联练习---------------------------------')
    print('>>>>>>核心思想:关联的字段可以直接使用对象进行赋值')
    user = WeiboUser.objects.get(pk=218)
    print('测试外键字段查询,查询用户1发表的博客内容:', Weibo.objects.filter(user=user))
    return HttpResponse('test filter')

 

 

附上模型:

from django.db import models


# Create your models here.
class CommonUtils(models.Model):
    create_time = models.DateTimeField('创建时间', auto_now_add=True, blank=True, null=True)
    update_time = models.DateTimeField('更新时间', auto_now=True, blank=True, null=True)

    class Meta:
        abstract = True


class WeiboUser(CommonUtils):
    username = models.CharField('用户名', max_length=32, blank=True, null=True)
    password = models.CharField('密码', max_length=256, blank=True, null=True)
    nickname = models.CharField('昵称', max_length=32, blank=True, default='')
    status = models.SmallIntegerField('状态', blank=True, default=1,
                                      choices=((1, '有效'), (2, '失败'), (3, '注册未完成'), (4, '未知')))

    class Meta:
        db_table = 'weibo_user'

    def __str__(self):
        return 'pk:{},username:{},password:{},nickname:{}'.format(self.id, self.username, self.password, self.nickname)


class Weibo(CommonUtils):
    content = models.CharField('微博内容', max_length=512, blank=True, null=True)
    user = models.ForeignKey(WeiboUser, on_delete=models.CASCADE, verbose_name='用户', blank=True, null=True)
    sourse = models.CharField('发布来源', max_length=16, blank=True, null=True)

    class Meta:
        db_table = 'weibo'

    def __str__(self):
        return 'pk:{},user:{},content:{}'.format(self.id, self.user, self.content)


class Comment(CommonUtils):
    content = models.CharField('评论内容', max_length=256)
    user = models.ForeignKey(WeiboUser, on_delete=models.CASCADE, verbose_name='评论的用户')
    weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE, verbose_name='关联的微博')

    class Meta:
        db_table = 'weibo_comments'

    def __str__(self):
        return 'pk:{},user:{},weibo:{}'.format(self.id, self.user, self.weibo)


class Friend(CommonUtils):
    user_from = models.ForeignKey(WeiboUser, on_delete=models.CASCADE, verbose_name='关注人', related_name='user_from')
    user_to = models.ForeignKey(WeiboUser, on_delete=models.CASCADE, verbose_name='被关注人', related_name='user_to')

    class Meta:
        db_table = 'weibo_friends'

    def __str__(self):
        return 'pk:{},user_from:{},user_to:{}'.format(self.id, self.user_from, self.user_to)


class WeiboImage(CommonUtils):
    weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='weibo', verbose_name='图片', blank=True, default='')

    class Meta:
        db_table = 'weibo_image'

    def __str__(self):
        return 'pk:{},weibo:{},image:{}'.format(self.id, self.weibo, self.image)

 

 

 

print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值