Django模型——CRUD的練習代碼

分享一下,本人練習模型的增刪改查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(’點個贊吧’)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章