日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...

發(fā)布時(shí)間:2024/9/27 python 81 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一部分給大家介紹Django的視圖。

接下來繼續(xù)來了解Django框架,來看第三部分,此部分是對(duì)數(shù)據(jù)庫(kù)的操作。

目錄:

一、設(shè)計(jì)系統(tǒng)表            返回目錄

首先打開sign/models.py,通過模型完成標(biāo)的創(chuàng)建:

from django.db importmodels#Create your models here.

#發(fā)布會(huì)表

classEvent(models.Model):

name= models.CharField(max_length=100) #發(fā)布會(huì)標(biāo)題

limit = models.IntegerField() #參加人數(shù)

status = models.BooleanField() #狀態(tài)

address = models.CharField(max_length=200) #地址

start_time = models.DateTimeField("event time") #發(fā)布會(huì)時(shí)間

create_time = models.DateTimeField(auto_now=True) #創(chuàng)建時(shí)間(自動(dòng)獲取當(dāng)前時(shí)間)

def __str__(self):returnself.name#嘉賓表

classGuest(models.Model):

event= models.ForeignKey(Event) #關(guān)聯(lián)發(fā)布會(huì)id

realname = models.CharField(max_length=64) #姓名

phone = models.CharField(max_length=16) #手機(jī)號(hào)

email = models.EmailField() #郵箱

sign = models.BooleanField() #簽到狀態(tài)

create_time = models.DateTimeField(auto_now=True) #創(chuàng)建時(shí)間(自動(dòng)獲取當(dāng)前時(shí)間)

def __str__(self):

return self.realname

classMeta: unique_together= ("event","phone")

模型創(chuàng)建好后,進(jìn)行數(shù)據(jù)遷移:

打開終端執(zhí)行:

test:guest zhan$python manage.py makemigrations sign

Migrationsfor'sign':

sign/migrations/0001_initial.py:-Create model Event-Create model Guest

test:guest zhan$python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions, sign

Running migrations:

Applying sign.0001_initial... OK

sign/migrations/下會(huì)生成0001_initial.py文件:

二、admin后臺(tái)管理          ?返回目錄

首先,在sign/admin.py文件中寫入:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event)

admin.site.register(Guest)

如下圖:

登錄Admin后臺(tái)系統(tǒng):http://127.0.0.1:8000/admin/

添加發(fā)布會(huì):

列表顯示一列發(fā)布會(huì)名字,是因?yàn)樽约憾x了__str__():里面的name

如果想顯示全部的列表字段,則在?sign/admin.py中繼續(xù)添加:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

# 添加兩個(gè)方法,把字段值放在list_display中

classEventAdmin(admin.ModelAdmin):

list_display= ["id","name","limit","status","address","start_time","create_time"]classGuestAdmin(admin.ModelAdmin):

list_display= ["event","realname","phone","email","sign","create_time"]#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event,EventAdmin)  # 并添加class進(jìn)來

admin.site.register(Guest,GuestAdmin)

還可以添加【搜索欄、過濾器】,在sign/admin.py中繼續(xù)添加:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

classEventAdmin(admin.ModelAdmin):

list_display= ["id","name","limit","status","address","start_time","create_time"]

search_fields= ["name"] #搜索欄

list_filter = ["status"] #過濾器

classGuestAdmin(admin.ModelAdmin):

list_display= ["event","realname","phone","email","sign","create_time"]

search_fields= ["realname","phone"] #搜索欄

list_filter = ["sign"] #過濾器

#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event,EventAdmin)

admin.site.register(Guest,GuestAdmin)

search_fields:用于創(chuàng)建搜索欄,可以設(shè)置匹配多個(gè)關(guān)鍵字。

list_filter:用于創(chuàng)建字段過濾器。

三、基本數(shù)據(jù)訪問(SQLite數(shù)據(jù)庫(kù))    ?返回目錄

下面我們通過Django自帶的SQLite操作數(shù)據(jù)庫(kù),如何通過數(shù)據(jù)庫(kù)進(jìn)行操作呢,需要命令行運(yùn)行manage.py的shell命令

python manage.py shell

1、插入語(yǔ)句

# 準(zhǔn)備條件

>>>from sign.models import Event,Guest>>>from datetime import datetime>>>Event.objects.all()

]>

>>>Guest.objects.all()

]>

①第一種插入語(yǔ)句:創(chuàng)建和保存

insert_e1 = Event(id='2',

name='魅族發(fā)布會(huì)',

limit='1000',

status=True,

address='天津梅江會(huì)展',

start_time=datetime(2018,10,15,12,0,0))

insert_e1.save()

②第二種插入語(yǔ)句:直接創(chuàng)建

Event.objects.create(id='2',

name='魅族發(fā)布會(huì)',

limit='1000',

status=True,

address='天津梅江會(huì)展',

start_time=datetime(2018,10,15,12,0,0))

Guest.objects.create(realname='owen',

phone= '136',

email='136@qq.com',

sign=False,

event_id='2')

但是會(huì)提示警告信息:

1430: RuntimeWarning: DateTimeField Event.start_time received a naive datetime (2018-10-15 12:00:00) whiletime zone support is active.

RuntimeWarning)

UTC問題,可以忽略此問題,guest/settings.py中,設(shè)置USE_TZ = False。

2、查詢語(yǔ)句

(1)精確查詢

address作為查詢條件,查詢name

>>> e1 = Event.objects.get(address ='天津梅江會(huì)展')>>>e1.name

'魅族發(fā)布會(huì)'# 或者

>>> Event.objects.get(address = '天津梅江會(huì)展').name

'魅族發(fā)布會(huì)'

>>>

相對(duì)應(yīng)的Guest表:

>>> g1 = Guest.objects.get(realname__contains='ow')>>>g1.event

>>>g1.event.name

'魅族發(fā)布會(huì)'>>>g1.event.address

'天津梅江會(huì)展'>>>

(2)模糊查詢

只想查詢關(guān)鍵字

filter()方法是從數(shù)據(jù)庫(kù)中取得匹配結(jié)果,返回的是列表;name與contains雙下劃線連接,contains類似于LIKE語(yǔ)句。

>>> Event.objects.filter(name__contains='發(fā)布會(huì)')

, ]>

>>>

(3)刪除數(shù)據(jù)

注:我寫的是模糊查詢刪除,最好是精確刪除。

>>> g1 = Guest.objects.get(realname__contains='ow')>>>g1.delete()

(1, {'sign.Guest': 1})>>>

#或者

>>> Guest.objects.get(realname__contains='ow').delete()

(1, {'sign.Guest': 1})>>>

(4)更新數(shù)據(jù)

>>> g1 = Guest.objects.get(realname__contains='ow')>>> g1.realname='owen02'>>>g1.save()>>>

#或者

Guest.objects.select_for_update().filter(realname__contains='ow').update(realname='owen')1

四、Django配置MySQL        ?返回目錄

雖然SQLite數(shù)據(jù)庫(kù)可以操作數(shù)據(jù),但是不適用于大型項(xiàng)目,下面來介紹MySQL數(shù)據(jù)庫(kù)在Django中的操作。

1、安裝Mysql數(shù)據(jù)庫(kù)

2、MySQL數(shù)據(jù)庫(kù)基本操作

數(shù)據(jù)庫(kù)操作:

#進(jìn)入mysql

mysql -u root -p

# 查看數(shù)據(jù)庫(kù)

show databases;

# 創(chuàng)建數(shù)據(jù)庫(kù)create database if not existsguest;

# 進(jìn)入guest數(shù)據(jù)庫(kù)useguest;

# 查看數(shù)據(jù)庫(kù)的表

show tables;

# 創(chuàng)建表create table if not existssign_guest(

idintunsigned auto_increment,

realnamevarchar(100)not null,

phonevarchar(16) not null,

emailVARCHAR(20) UNIQUE, # UNIQUE:不可重復(fù),只有null是可以重復(fù)sign varchar(5),

create_time date,primary key(id,phone)

)charset=utf8;

# 查看表屬性descsign_guest;

# 插入數(shù)據(jù)insert into sign_guest(realname,phone,email,sign,create_time)values('zc','16612345678','123@qq.com','1',now())

3、安裝pymysql

安裝命令:

pip install pymysql

在此忽略......

4、在Django中配置MySQL

修改guest/settings.py下的DATABASES

DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql', #驅(qū)動(dòng)

'HOST': '127.0.0.1', #主機(jī)地址

'PORT': '3306', #端口號(hào)

'NAME': 'guest', #數(shù)據(jù)庫(kù)

'USER': 'root', #登錄用戶名

'PASSWORD': '1234567', #登錄密碼

'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",

},

}

}

在guest項(xiàng)目中輸入命令:

test:guest zhan$ python manage.py migrate

但是報(bào)錯(cuò):

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'

原因?yàn)闆]有MySQLdb驅(qū)動(dòng),解決辦法如下:

在.../guest/__init__.py中添加代碼:

importpymysql

pymysql.install_as_MySQLdb()

然后再執(zhí)行命令:

python manage.py migrate

但是,會(huì)提示錯(cuò)誤,如果沒有問題跳過此段落:

......

Applying auth.0006_require_contenttypes_0002...OK

Applying auth.0007_alter_validators_add_error_messages...OK

Applying auth.0008_alter_user_username_max_length...OK

Applying sessions.0001_initial...OK

Applying sign.0001_initial...Traceback (most recent call last):

...

...

...

pymysql.err.InternalError: (1050, "Table 'sign_guest' already exists")

原因?yàn)槲以谏厦鎸憁ysql基本數(shù)據(jù)庫(kù)操作時(shí)候,自己創(chuàng)建了sign_guest表,所以最好刪除guest數(shù)據(jù)庫(kù),重新再執(zhí)行一遍命令。

終端進(jìn)入數(shù)據(jù)庫(kù),具體操作不描述,上面基本操作介紹過。

#刪除數(shù)據(jù)庫(kù)

drop database guest;#創(chuàng)建數(shù)據(jù)庫(kù)

create database guest;

再執(zhí)行命令:

python manage.py migrate

正確顯示如下:

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions, sign

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying admin.0002_logentry_remove_auto_add... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying auth.0007_alter_validators_add_error_messages... OK

Applying auth.0008_alter_user_username_max_length... OK

Applying sessions.0001_initial... OK

Applying sign.0001_initial... OK

因?yàn)楦鼡Q了數(shù)據(jù)庫(kù),所以里面的Admin超級(jí)管理員賬號(hào)也需要重新創(chuàng)建。

然后再終端輸入命令:

python manage.py createsuperuser

Username (leave blank to use 'zhan'): admin

Email address: xxx@xxx.com

Password:

Password (again):

Superuser created successfully.

至此,Django的模型創(chuàng)建完畢,下一篇介紹Django模板

總結(jié)

以上是生活随笔為你收集整理的python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。