久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Django

 小飛苑 2017-06-11

一、數(shù)據(jù)庫操作

1、創(chuàng)建model表
       

基本結(jié)構(gòu)

1
2
3
4
5
6
from django.db import models
   
class userinfo(models.Model):
    #如果沒有models.AutoField,,默認(rèn)會創(chuàng)建一個id的自增列
    name = models.CharField(max_length=30)
    email = models.EmailField()
    memo = models.TextField()
更多字段:
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    1,、models.AutoField  自增列= int(11)
      如果沒有的話,,默認(rèn)會生成一個名稱為 id 的列,,如果要顯示的自定義一個自增列,,必須將給列設(shè)置為主鍵 primary_key=True,。
    2、models.CharField  字符串字段
      必須 max_length 參數(shù)
    3,、models.BooleanField  布爾類型=tinyint(1)
      不能為空,,Blank=True
    4、models.ComaSeparatedIntegerField  用逗號分割的數(shù)字=varchar
      繼承CharField,,所以必須 max_lenght 參數(shù)
    5,、models.DateField  日期類型 date
      對于參數(shù),auto_now =True則每次更新都會更新這個時間,;auto_now_add 則只是第一次創(chuàng)建添加,,之后的更新不再改變。
    6,、models.DateTimeField  日期類型 datetime
      同DateField的參數(shù)
    7,、models.Decimal  十進(jìn)制小數(shù)類型= decimal
      必須指定整數(shù)位max_digits和小數(shù)位decimal_places
    8、models.EmailField  字符串類型(正則表達(dá)式郵箱)=varchar
      對字符串進(jìn)行正則表達(dá)式
    9,、models.FloatField  浮點(diǎn)類型= double
    10,、models.IntegerField  整形
    11、models.BigIntegerField  長整形
      integer_field_ranges ={
        'SmallIntegerField':(-32768,32767),
        'IntegerField':(-2147483648,2147483647),
        'BigIntegerField':(-9223372036854775808,9223372036854775807),
        'PositiveSmallIntegerField':(0,32767),
        'PositiveIntegerField':(0,2147483647),
      }
    12,、models.IPAddressField  字符串類型(ip4正則表達(dá)式)
    13,、models.GenericIPAddressField  字符串類型(ip4和ip6是可選的)
      參數(shù)protocol可以是:both,、ipv4,、ipv6
      驗證時,會根據(jù)設(shè)置報錯
    14,、models.NullBooleanField  允許為空的布爾類型
    15,、models.PositiveIntegerFiel  正Integer
    16、models.PositiveSmallIntegerField  正smallInteger
    17,、models.SlugField  減號,、下劃線、字母,、數(shù)字
    18,、models.SmallIntegerField  數(shù)字
      數(shù)據(jù)庫中的字段有:tinyint,、smallint、int,、bigint
    19,、models.TextField  字符串=longtext
    20、models.TimeField  時間 HH:MM[:ss[.uuuuuu]]
    21,、models.URLField  字符串,,地址正則表達(dá)式
    22、models.BinaryField  二進(jìn)制
    23,、models.ImageField圖片
    24,、models.FilePathField文件

      

更多參數(shù)
2、注冊APP,,settings添加app
3,、生成相應(yīng)的表
    python manage.py makemigrations
    python manage.py migrate   
 
4、admin后臺注冊表

python manage.py createsuperuser 創(chuàng)建用戶
后臺可以管理,,添加數(shù)據(jù)
對數(shù)據(jù)進(jìn)行增刪改查
models.UserInfo.objects.all()
models.UserInfo.objects.all().values('user')    #只取user列
models.UserInfo.objects.all().values_list('id','user')    #取出id和user列,,并生成一個列表
models.UserInfo.objects.get(id=1)
models.UserInfo.objects.get(user='yangmv')
成功獲取數(shù)據(jù)
models.UserInfo.objects.create(user='yangmv',pwd='123456')
或者
obj = models.UserInfo(user='yangmv',pwd='123456')
obj.save()
或者
dic = {'user':'yangmv','pwd':'123456'}
models.UserInfo.objects.create(**dic)
models.UserInfo.objects.filter(user='yangmv').delete()
models.UserInfo.objects.filter(user='yangmv').update(pwd='520')
或者
obj = models.UserInfo.objects.get(user='yangmv')
obj.pwd = '520'
obj.save()

  1.  常用方法

      

二、常用字段
models.DateTimeField  日期類型 datetime
參數(shù),,
auto_now = True :則每次更新都會更新這個時間
auto_now_add 則只是第一次創(chuàng)建添加,,之后的更新不再改變。
1
2
3
4
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    ctime = models.DateTimeField(auto_now=True)
    uptime = models.DateTimeField(auto_now_add=True)
1
2
3
4
5
6
from web import models
def home(request):
    models.UserInfo.objects.create(name='yangmv')
    after = models.UserInfo.objects.all()
    print after[0].ctime
    return render(request, 'home/home.html')

  

表結(jié)構(gòu)的修改
表結(jié)構(gòu)修改后,,原來表中已存在的數(shù)據(jù),,就會出現(xiàn)結(jié)構(gòu)混亂,makemigrations更新表的時候就會出錯
解決方法:
1,、新增加的字段,,設(shè)置允許為空。生成表的時候,,之前數(shù)據(jù)新增加的字段就會為空,。(null=True允許數(shù)據(jù)庫中為空,blank=True允許admin后臺中為空)
2,、新增加的字段,,設(shè)置一個默認(rèn)值。生成表的時候,,之前的數(shù)據(jù)新增加字段就會應(yīng)用這個默認(rèn)值

執(zhí)行makemigrations,, migrate 后。老數(shù)據(jù)會自動應(yīng)用新增加的規(guī)則

models.ImageField                        圖片
models.GenericIPAddressField      IP
ip = models.GenericIPAddressField(protocol="ipv4",null=True,blank=True)
img = models.ImageField(null=True,blank=True,upload_to="upload")
數(shù)據(jù)庫中保存的只是圖片的路徑
常用參數(shù)
選擇下拉框 choices
class UserInfo(models.Model):
USER_TYPE_LIST = (
(1,'user'),
(2,'admin'),
)
user_type = models.IntegerField(choices=USER_TYPE_LIST,default=1)

 

2,、連表結(jié)構(gòu)

  • 一對多:models.ForeignKey(其他表)
  • 多對多:models.ManyToManyField(其他表)
  • 一對一:models.OneToOneField(其他表)

應(yīng)用場景:

  • 一對多:當(dāng)一張表中創(chuàng)建一行數(shù)據(jù)時,,有一個單選的下拉框(可以被重復(fù)選擇)
    例如:創(chuàng)建用戶信息時候,需要選擇一個用戶類型【普通用戶】【金牌用戶】【鉑金用戶】等,。
  • 多對多:在某表中創(chuàng)建一行數(shù)據(jù)是,,有一個可以多選的下拉框
    例如:創(chuàng)建用戶信息,,需要為用戶指定多個愛好
  • 一對一:在某表中創(chuàng)建一行數(shù)據(jù)時,有一個單選的下拉框(下拉框中的內(nèi)容被用過一次就消失了
    例如:原有含10列數(shù)據(jù)的一張表保存相關(guān)信息,,經(jīng)過一段時間之后,,10列無法滿足需求,需要為原來的表再添加5列數(shù)據(jù)
     
 
一對多:
1
2
3
4
5
6
class Game(models.Model):
    gname = models.CharField(max_length=32)
class Host(models.Model):
    hostname = models.CharField(max_length=32)
    game = models.ForeignKey('Game')

  

這是Game表,,里面有3個業(yè)務(wù)

這是主機(jī)表,,可以通過外鍵,對應(yīng)到Game表的業(yè)務(wù)的ID

多對多:
1
2
3
4
5
6
7
8
class UserGroup(models.Model):
    group_name = models.CharField(max_length=16)
class User(models.Model):
    name = models.CharField(max_length=16)
    sex = models.CharField(max_length=16)
    email = models.EmailField(max_length=32)
    usergroup_user = models.ManyToManyField('UserGroup')

 

Django model會自動創(chuàng)建第3張關(guān)系表,,用于對應(yīng)user id 和usergroup id
這是UserGroup表
這是User表
這是Django自動生成的對應(yīng)關(guān)系表

user_id = 1 為 yangmv,,同時屬于1,2(技術(shù)部,運(yùn)營部)
 
 
 
一對一:   (一對多增加了不能重復(fù))
1
2
3
4
5
6
7
8
9
class User2(models.Model):
    name = models.CharField(max_length=16)
    sex = models.CharField(max_length=16)
    email = models.EmailField(max_length=32)
class Admin(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    admin_user2 = models.OneToOneField('User2')

  


 

連接Mysql
  1.   

 一對多操作實例
首先生成2個表
1
2
3
4
5
6
7
8
from django.db import models
class Group2(models.Model):
    caption = models.CharField(max_length=32)
class User2(models.Model):
    username = models.CharField(max_length=32)
    group2 = models.ForeignKey('Group2')

  

input和select標(biāo)簽用forms生成

先執(zhí)行create_group生成3個group

 

已經(jīng)查詢出Group數(shù)據(jù)


添加
方法1,,方法2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def create_user(request):
    obj = Forign.UserForm(request.POST)
    if request.method == 'POST':
        if obj.is_valid():
            all_data = obj.clean()
            #print all_data
            #獲取提交頁面提交來的數(shù)據(jù){'username': u'yang1', 'usergroup': 1}
            #方法1,,先獲取對象,添加
            #group_obj = models.Group2.objects.get(id=all_data['usergroup'])
            #models.User2.objects.create(username=all_data['username'],usergroup=group_obj)
            #方法2(推薦)
            models.User2.objects.create(username=all_data['username'],group2_id=all_data['usergroup'])
            #django會自動把數(shù)據(jù)庫group2變?yōu)間roup2_id
        else:
            error = obj.errors
            print error['username'][0]
            print error['usergroup'][0]
    return render(request,'forign/create_user.html',{'obj':obj})

  

 

方法3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def create_user(request):
    obj = Forign.UserForm(request.POST)
    if request.method == 'POST':
        if obj.is_valid():
            all_data = obj.clean()
            #print all_data
            #獲取提交頁面提交來的數(shù)據(jù){'username': u'yang1', 'usergroup': 1}
            #方法1,,先獲取對象,,添加
            #group_obj = models.Group2.objects.get(id=all_data['usergroup'])
            #models.User2.objects.create(username=all_data['username'],usergroup=group_obj)
            #方法2(推薦)
            #models.User2.objects.create(username=all_data['username'],group2_id=all_data['usergroup'])
            #django會自動把數(shù)據(jù)庫group2變?yōu)間roup2_id
            #方法3(推薦)
            models.User2.objects.create(**all_data)
            print models.User2.objects.all().count()
        else:
            pass
            # error = obj.errors
            # print error['username'][0]
            # print error['usergroup_id'][0]
    return render(request,'forign/create_user.html',{'obj':obj})

  

查詢。展示出所有的數(shù)據(jù)

1
2
3
4
5
6
7
8
9
10
11
12
def create_user(request):
    obj = Forign.UserForm(request.POST)
    if request.method == 'POST':
        if obj.is_valid():
            all_data = obj.clean()
            #方法3(推薦)
            models.User2.objects.create(**all_data)
            print models.User2.objects.all().count()
        else:
            pass
    user_list = models.User2.objects.all()
    return render(request,'forign/create_user.html',{'obj':obj,'user_list':user_list})
1
2
3
4
5
6
7
8
<table border="1">
    {% for item in user_list %}
        <tr>
            <td>{{ item.username }}</td>
            <td>{{ item.group2.caption }}</td>
        </tr>
    {% endfor %}
</table>

  

  

 

GET方式查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def create_user(request):
    obj = Forign.UserForm(request.POST)
    if request.method == 'POST':
        if obj.is_valid():
            all_data = obj.clean()
            #方法3(推薦)
            models.User2.objects.create(**all_data)
            print models.User2.objects.all().count()
        else:
            pass
    #查用戶
    get_user = request.GET.get('username')
    user_list = models.User2.objects.filter(username=get_user)
    return render(request,'forign/create_user.html',{'obj':obj,'user_list':user_list})

 

1
2
3
#查組
get_val = request.GET.get('group')
user_list = models.User2.objects.filter(group2__caption=get_val)

  

一對多跨表操作,,總結(jié)
1,、group2對應(yīng)的是一個對象
2、創(chuàng)建數(shù)據(jù) group2_id ,,直接查詢數(shù)據(jù)庫
3,、獲取數(shù)據(jù),通過.     group2.caption
4,、查詢數(shù)據(jù),,通過__   group2__caption

 

 

 

  

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多