注意事项:随时备份、随时记录、从宏观到微观
不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行之止矣
安装 Python 3.6.2
pip install django==1.11.4
django-admin startproject myproject
python manage.py runserver
http://127.0.0.1:8000
使用组合键 Control + C 来终止开发服务器。
django-admin startapp boards
settings.py:这个文件包含了所有的项目配置。将来我们会一直提到这个文件!
urls.py:这个文件负责映射我们项目中的路由和路径。例如,如果你想
在访问URL / about/ 时显示某些内容,则必须先在这里做映射关系。
在Django的哲学中,我们有两个重要的概念:
app:是一个可以做完成某件事情的Web应用程序。一个应用程序通常由一组models(数据库表),views(视图),templates(模板),tests(测试) 组成。
project:是配置和应用程序的集合。一个项目可以由多个应用程序或一个应用程序组成。
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)周期的文件。
我们需要找到一种方法来区分普通用户和管理员用户,因为只有管理员可以创建版块。
迁移模型
python manage.py makemigrations
python manage.py sqlmigrate boards 0001
python manage.py migrate
python manage.py shell
测试将是一个反复出现的主题,我们将在整个教程系列中一起探讨不同的概念和策略。
python manage.py test --verbosity=2 0是无输出,1是正常输出,2是详细输出。
在manage.py所在的目录创建一个名为 templates的新文件夹:
在templates文件夹中,创建一个名为home.html的HTML文件:
只要记得但凡是需要引用CSS,JavaScript或图片文件的地方就使用 {% static %} 。
一个项目可以有很多 urls.py 分布在多个应用(app)中。Django 需要一个url.py 作为入口。
这个特殊的 urls.py 叫做 根路由配置(root URLconf)。它被定义在 settings.py 中。
URL 调度器(dispatcher) 和 URLconf (URL configuration) 是 Django应用中的基础部分。
def url(regex, view, kwargs=None, name=None):
在 templates 文件夹中创建一个名为 base.html 的文件:
test_csrf:由于 CSRF Token 是处理 Post 请求的基本部分,我们需要保证我们的 HTML 包含 token。。
test_new_topic_valid_post_data:发送有效的数据并检查视图函数是否创建了 Topic 和 Post 实例。
test_new_topic_invalid_post_data:发送一个空字典来检查应用的行为。
test_new_topic_invalid_post_data_empty_fields:类似于上一个测试,但是这次我们发送一些数据。预期应用程序会验证并且拒绝空的subject 和 message。
Forms(表单) 用来处理我们的输入。Django 使用两种类型的form: forms.Form 和 forms.ModelForm 。
首先我们判断请求是 POST 还是 GET。如果请求是 POST,这意味着用户向服务器提交了一些数据。
所以我们实例化一个将 POST 数据传递给 form 的form 实例: form = NewTopicForm(request.POST) 。
所以,我们有三种不同的渲染状态:Initial state:Invalid:Valid:
复用表单模板:在 templates 文件夹中,创建一个新的文件夹命名为 includes:
这一章节将会全面介绍 Django 的身份认证系统,我们将实现注册、登录、注销、密码重置和密码修改的整套流程。
如果用户已经通过身份认证,我们应该显示他们的名字,和带有“我的账户”,“修改密码”,“登出”这三个选项的下拉框
django-admin startapp accounts
下一步,在 settings.py 文件中将 accounts app 添加到 INSTALLED_APPS :
密码重置过程需要四个视图:
带有表单的页面,用于启动重置过程;
一个成功的页面,表示该过程已启动,指示用户检查其邮件文件夹等;
检查通过电子邮件发送token的页面
一个告诉用户重置是否成功的页面
如果你发现上面的说明很模糊,只需要直接在下面的链接下载文件
https://code.jquery.com/jquery-3.2.1.min.js
https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js
https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js
python manage.py createsuperuser
Username (leave blank to use 'vitorfs'): admin
Email address: admin@example.com
Password:larken0627
Password (again):larken0627
Superuser created successfully.
ERROR: test_board_topics_view_not_found_status_code (boards.tests.BoardTopicsTests)
ERROR: test_new_topic_invalid_post_data (boards.tests.NewTopicTests)
FAIL: test_new_topic_invalid_post_data_empty_fields (boards.tests.NewTopicTests)
myproject/settings.py
INSTALLED_APPS = ['boards',]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
ROOT_URLCONF = 'myproject.urls'
LOGOUT_REDIRECT_URL = 'home'
LOGIN_REDIRECT_URL = 'home'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
myproject/urls.py
from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import views as auth_views
from accounts import views as accounts_views
from boards import views
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^signup/$', accounts_views.signup, name='signup'),
url(r'^logout/$', auth_views.LogoutView.as_view(), name='logout'),
url(r'^boards/(?P<pk>\d+)/$', views.board_topics, name='board_topics'),
url(r'^boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),
url(r'^admin/', admin.site.urls),
]
templates/home.html
{% for board in boards %}
{{ board.name }} <br>
{% endfor %}
boards/views.py
from django.shortcuts import render
from .models import Board
def home(request):
boards = Board.objects.all()
return render(request, 'home.html', {'boards': boards})
boards/tests.py
from django.core.urlresolvers import reverse
from django.test import TestCase
class HomeTests(TestCase):
def test_home_view_status_code(self):
url = reverse('home')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)

Django入门与实践 1-16章总结的更多相关文章

  1. Django入门与实践-第16章:用户登录(完结)

    # myproject/settings.py LOGIN_REDIRECT_URL = 'home' EMAIL_BACKEND = 'django.core.mail.backends.conso ...

  2. Django入门与实践-第26章:个性化工具(完结)

    http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...

  3. Django入门与实践-第14章:用户注册(完结)

    http://127.0.0.1:8000/signup/ django-admin startapp accounts INSTALLED_APPS = [ 'accounts', ] # mypr ...

  4. Django入门与实践-第13章:表单处理(完结)

    http://127.0.0.1:8000/boards/1/ http://127.0.0.1:8000/boards/2/ http://127.0.0.1:8000/boards/3/ http ...

  5. Django入门与实践-第12章:复用模板(完结)

    http://127.0.0.1:8000/http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1 ...

  6. Django入门与实践-第11章:URL 分发(完结)

    http://127.0.0.1:8000http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1: ...

  7. Django入门与实践-第25章:Markdown 支持(完结)

    http://127.0.0.1:8000/boards/1/topics/102/reply/ 让我们在文本区域添加 Markdown 支持来改善用户体验. 你会看到要实现这个功能非常简单. 首先, ...

  8. Django入门与实践-第24章:我的账户视图(完结)

    http://127.0.0.1:8000/settings/account/ #好的,那么,这部分将是我们最后的一个视图.之后,我们将专心来改进现有功能. #accounts/views.py fr ...

  9. Django入门与实践-第23章:分页实现(完结)

    http://127.0.0.1:8000/boards/1/ #从现在起,我们将在 board_topics 这个视图中来操作. python manage.py shell from django ...

  10. Django入门与实践-第22章:基于类的视图

    http://127.0.0.1:8000/boards/1/topics/2/posts/2/edit/ http://127.0.0.1:8000/ #boards/views.py from d ...

随机推荐

  1. html的基本数据类型(数字,字符串, 列表, 字典)

    基本数据类型 1. 数字 a = 18 ; 2. 字符串 a = 'alex'a.chartAt(索引位置)a.substring(起始位置, 借宿位置)a.length 获取当前字符串长度a.tri ...

  2. Spring MVC 确定目标方法POJO 类型参数

    1:确定一个Key 2. 在implicitMode 中存在Key 对应的对象, 若存在则作为参数传入 3. 在implicitMode 中不存在Key 对应的对象, 则检查当前@SessionAtr ...

  3. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    1.什么是匿名内部类? 内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类. 2.为什么需要匿名内部类? 每个inner class都能够各自继承某一实现类(implemen ...

  4. java并发--流量控制demo

    实现一个流控程序.控制客户端每秒调用某个远程服务不超过N次,客户端是会多线程并发调用,需要一个轻量简洁的实现,大家看看下面的一个实现,然后可以自己写一个实现. import java.util.Dat ...

  5. 磁盘IO过高时的处理办法

    针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大 ...

  6. linux下的计算器

    (1)bc bc在默认的情况下是个交互式的指令.在bc工作环境下,可以使用以下计算符号:+ 加法 - 减法 * 乘法 / 除法 ^ 指数 % 余数如: 3+4;5*2;5^2;18/4      &l ...

  7. function方法控制是否隐藏部分内容

    $(document).ready(function() { $('input[type=radio][name=IE]').change(function() { if (this.value == ...

  8. 工作流和过程自动化框架 Camunda BPM

    Camunda BPM 是一个灵活的工作流和过程自动化框架,它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中.Camunda B ...

  9. for循环计算阶乘

    int x = 10; for(int y = x - 1; y >= 1; y--) { x = x * y; } System.out.println(x); 从10乘到1的阶乘写法. lo ...

  10. 第五章 二叉树(e1)先序遍历