数据库相关
在 mysite/settings.py中,包含了对于数据库的相关设置,如果不想使用python自带的Sqlite,就需要更改一些设置。
鉴于初学,为不增加负担,我没有对数据库设置做任何更改。
只需执行命令:py manag.py migration
此命令的作用是,根据在mysite/settings.py中的设置,django自动为app生成必要的table(数据库中的表)
创建模板
定义必要的模板,数据库层级,额外的元数据
这里定义question和choice两个模板,每一个choice对应一个question,由两个类实现
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
notes:
1.实现model的类都继承了django.db.models.Model
2.实现model的类中含类变量,如question_text,在数据库中有一个相应的字段
3.每一个字段由一个Field类的实例实现;它告诉django每一个字段将hold什么类型的数据
4.Field实例的名字就是字段的名字,在python代码中将被使用
5.可以通过位于第一个位置的可选参数设定字段的名字,如DateField(‘date published’),如果不设定,则会自动生成一个machine-friendly的名字
6.一些字段需要一些参数,如CharField()的实例
7.这里 ForeignKey指定了choice与question一对一的关系
激活model
1.在配置类mysite/settings.py中,告知django我的app:polls;daima代码如下:
不要忘了逗号!
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
2.告知django,model发生了改变,并将存储这些改变:
py manage.py makemigrations polls
3.将改变应用于数据库,即使django自动在数据库中为model创建对一个的表和字段
py manage.py migrate
创建admin user,来管理app,visitor不能进入相关页面
py manage.py createsuperuser
4.将我的polls加入admin页面,使superuser可以进行管理:
打开polls/admin.py,输入如下代码,在admin站点注册了model中的Question对象
from django.contrib import admin
from .models import Question
admin.site.register(Question)
5.编写visitor能访问的页面.html文件
6.在polls/views中编写视图函数,如:
def detail(request):
return render(requests,'polls/XXX.html')
7.在polls/urls中编写视图相应的url:
urlpatterns[
path('detail/',views.detail)
]
path的第一个参数为i字符串,与主url后相匹配;第二个参数为调用的视图。