django 学习笔记
应用程序模型的当前状态 : python manage.py makemigrations
将我们生成的迁移文件应用到数据库: python manage.py migrate
跳转到manage.py文件所在的目录并执行以下命令:django-admin startapp boards
-
migrations/:在这个文件夹里,Django会存储一些文件以跟踪你在models.py文件中创建的变更,用来保持数据库和models.py的同步。
-
admin.py:这个文件为一个django内置的应用程序Django Admin的配置文件。
-
apps.py:这是应用程序本身的配置文件。
-
models.py:这里是我们定义Web应用程序数据实例的地方。models会由Django自动转换为数据库表。
-
tests.py:这个文件用来写当前应用程序的单元测试。
-
views.py:这是我们处理Web应用程序请求(request)/响应(resopnse)周期的文件。
可以使用manage.py 工具加载我们的项目来启动 Python shell :python manage.py shell
项目将被添加到sys.path并加载Django。这意味着我们可以在项目中导入我们的模型和其他资源并使用它。
将其余的字段当做Python属性访问
board = Board(name='Django', description='This is a board about Django.')
board.save()
创建一个新的Board对象:
board = Board.objects.create(name='Python', description='General discussion about Python.')
列出数据库中所有现有的版块:
boards_list = Board.objects.all()
for board in boards_list:
print(board.description)
查询数据库并返回单个对象: 若返回多条结果或没有结果,则get会抛异常
django_board = Board.objects.get(id=1) # Board.objects.get(name='Django')
django_board.name
urlpatterns
中的顺序很重要,因为 Django 一旦找到匹配就会停止往后搜索。如果 Django 在 URLconf 中没有找到匹配项,他会通过 Page Not Found 的错误处理代码抛出一个 404 异常
正则表达式 (?P<pk>\d+)
,这是告诉 Django 将捕获到的值放入名为 pk 的关键字参数中
def board_topics(request, pk): 使用了 (?P<pk>\d+)
正则表达式,在 board_topics
函数中,关键字参数必须命名为 pk。
如果你想在视图函数使用任意名字的参数,那么可以这样定义:url(r'^boards/(\d+)/$', views.board_topics, name='board_topics')
def board_topics(request, board_id) 或 def board_topics(request, id)
==========
技巧部分是正则表达式。我准备了一个最常用的 URL patterns 的列表。当你需要一个特定的 URL 时你可以参考这个列表。
主键 自增字段 | |
---|---|
正则表达式 | (?P<pk>\d+) |
举例 | url(r'^questions/(?P<pk>\d+)/$', views.question, name='question') |
有效 URL | /questions/934/ |
捕获数据 | {'pk': '934'} |
Slug 字段 | |
---|---|
正则表达式 | (?P<slug>[-\w]+) |
举例 | url(r'^posts/(?P<slug>[-\w]+)/$', views.post, name='post') |
有效 URL | /posts/hello-world/ |
捕获数据 | {'slug': 'hello-world'} |
有主键的 Slug 字段 | |
---|---|
正则表达式 | (?P<slug>[-\w]+)-(?P<pk>\d+) |
举例 | url(r'^blog/(?P<slug>[-\w]+)-(?P<pk>\d+)/$', views.blog_post, name='blog_post') |
有效 URL | /blog/hello-world-159/ |
捕获数据 | {'slug': 'hello-world', 'pk': '159'} |
Django 用户名 | |
---|---|
正则表达式 | (?P<username>[\w.@+-]+) |
举例 | url(r'^profile/(?P<username>[\w.@+-]+)/$', views.user_profile, name='user_profile') |
有效 URL | /profile/vitorfs/ |
捕获数据 | {'username': 'vitorfs'} |
Year | |
---|---|
正则表达式 | (?P<year>[0-9]{4}) |
举例 | url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive, name='year') |
有效 URL | /articles/2016/ |
捕获数据 | {'year': '2016'} |
Year / Month | |
---|---|
正则表达式 | (?P<year>[0-9]{4})/(?P<month>[0-9]{2}) |
举例 | url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive, name='month') |
有效 URL | /articles/2016/01/ |
捕获数据 | {'year': '2016', 'month': '01'} |
你可以在这篇文章中看到更多关于正则表达式匹配的细节:https://simpleisbetterthancomplex.com/references/2016/10/10/url-patterns.html
=======ORM操作数据库:https://www.bilibili.com/read/cv4136105/
士大夫