# StudyDjango **Repository Path**: JackyYuan/StudyDjango ## Basic Information - **Project Name**: StudyDjango - **Description**: Python的django框架的初步学习 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-10-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # StudyDjango #### 介绍 Python的django框架的初步学习 #### 环境配置 - 创建虚拟环境 ```shell $ virtualenv projectenv -p python ``` - 激活虚拟环境 ```shell $ source projectenv/Scripts/activate ``` - 查看当前目录 ```shell $ pwd /f/webworkspace/PythonFrames/StudyDjango (projectenv) ``` - 退出虚拟环境 ```shell $ deactivate ``` - 查看当前目录 ```shell $ pwd /f/webworkspace/PythonFrames/StudyDjango ``` - 安装django框架 ```shell $ pip3 install django==1.11.4 ``` #### 创建项目 - 创建新项目: ```shell $ django-admin startproject Study ``` - 安装代码提示功能 ```shell $ pip install -U pylint ``` - 本地测试运行项目 ```shell $ python manage.py runserver 127.0.0.1:9000 ``` - 创建app ```shell $ django-admin startapp boards ``` #### 模型 - 迁移模型 ```shell $ python manage.py makemigrations ``` - `0001_initial.py` 代表了应用程序模型的当前状态. - 检查数据库执行的SQL指令 ```shell $ python manage.py sqlmigrate boards 0001 ``` - 将迁移的文件应用到数据库: ```shell $ python manage.py migrate ``` #### 管理 - 控制台 ```shell $ python manage.py shell ``` - 执行测试用例 ```shell $ python manage.py test ``` - 查看测试执行时详细的信息 ```shell $ python manage.py test --verbosity=2 ``` ​ Verbosity决定了将要打印到控制台的通知和调试信息量, 0是无输出. 1是正常输出. 2是详细输出. #### 静态文件设置 - 模板标签: 用于构成资源文件完整URL. ```html {% static %} ``` #### admin管理 - 创建管理员帐户 ```shell $ python manage.py createsuperuser ``` - 帐户: `test`,密码: `test8888` #### URL分发 - 始终使用`{% url %}`模板标签写应用的URL. 第一个参数是URL的名字(urls.py). 然后根据需求传递任意数量的参数. #### 复用模板 - 用于在模板中保留一个空间,一个"子"模板,可以在这个空间中插入代码 ``` {% block %} 标签. ``` #### 表单处理 - django使用`CSRF Token`保护所有的`POST`请求. 这是一个避免外部站点或者应用程序向我的应用提交数据的安全措施. 应用程序每次接收一个POST时,都会先检查`CSRF Token`。 如果这个`request`没有`token`,或者这个token是无效的,它就会抛弃提交的数据. - `csrf_token`的模板标签: `{% csrf_token %}`, 这个token是与其他表单数据一起提交的隐藏字段. #### 表单报错的信息 ```python django.utils.datastructures.MultiValueDictKeyError: "'subject'" ``` ```python UnboundLocalError: local variable 'message' referenced before assignment ``` #### 正确创建表单 Django使用两种类型的form: `forms.Form`和`forms.ModelForm`。 `Form`类是通用的表单实现. 可以使用它来处理与应用程序model没有直接关联的数据.`ModelForm`是`Form`的子类,它与model类相关联. 这个`form`有三个渲染选项: `form.as_table`,`form.as_ul`和`form.as_p`. 这是一个快速的渲染表单所有字段的方法. `as_table`使用table标签来格式化输入. `as_ul`使用li标签. 使用Forms API, Django会验证数据并且向每个字段添加错误消息。 ##### 用bootstrap表单渲染 - 当使用Bootstrap或者前端库时, 这个库可以控制渲染的处理. ```shell pip install django-widget-tweaks ``` - 使用`{% load widget_tweaks %}`模板标签将其加载到模板.然后使用它: ```html {% render_field field class="form-control" %} ``` 使用`render_field`,需要传递一个表单域实例作为第一个参数,然后可以添加任意的HTML属性去补充它. 1. 有三种不同的渲染状态: - `Initial state`: 表单没有数据(不受约束). - `Invalid`: 添加了`.is-invalid`这个css class并将错误消息添加到具有`.invalid-feedback`class的元素中. - Valid: 添加了`.is-valid`的css class, 以绿色绘制表单域,并向用户反馈它是否可行. ##### 复用表单模板 - `{% include %}`用来在其他的模板中包含html模板. 这是在项目中重用html组件的常用方法. #### 用户注册 ##### 初始设置 ```shell $ django-admin startapp accounts ``` 将`accounts app`添加到`settings.py`文件中的`INSTALLED_APPS`。 ##### 注册 创建注册视图,在`urls.py`文件中创建新路由. ##### 测试 测试状态码以及URL `/signup/`是否返回了正确的视图函数. ##### 模板 在`base.html`模板中,块代码`{% block stylesheet %}{% endblock %}`表示添加一些额外的CSS,用于某些特定的页面. 代码块`{% block body %}`包装了整个HTML文档. 结束代码块`{% endblock body %}`. **注册的账号为: Jacky, 密码为: 123.cn666** ```python 'username': 'Jack', 'email': 'Jacky@163.com', 'password1':'123.cn666', 'password2':'123.cn666' ``` #### 用户注销 需要添加注销视图,编辑`urls.py`添加新路由. - 基于类的视图可扩展和重用视图. ##### 为登录用户显示菜单 添加一个带注销链接的下拉菜单. Bootstrap4下拉组建需要jQuery。 下载`jquery-3.4.1.min.js`文件夹: 下载popper的js文件的链接为: 下载bootstrap的js文件的链接为: https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js - Bootstrap4需要名为Popper的库才能工作. ```shell $ cnpm install popper.js --save # 下载popper库 $ cp node_modules/_popper.js\@1.15.0\@popper.js/dist/umd/popper.min.js ./Study/static/js/ ``` - 将`bootstrap.min.js`文件也放到js文件夹下. - 告诉Django程序,要在用户登录时显示下拉菜单,如果没有,则显示登录并注册按钮. #### 用户登录 无登录信息会提示错误信息. - 表单有一种特殊类型的错误,叫做`non-field errors`。 这是一组与特定字段无关的错误. - 添加一个Bootstrap4 CSS类`mb-0` 作用是代表了`"margin bottom=0"(底部边缘为0)`,是为了保持间距的一致性. ##### 模板过滤器工作方式 - 首先,将它加载到模板中,请注意,在创建这个文件后,请重新运行本地服务器,这样方便Django可以识别新的模板标签. ```html {% load form_tags %} # 在模板中使用 {{ form.username | field_type }} ``` #### 控制台收发Email 将所有电子邮件写入文本文件或仅将其显示在控制台中. - 编辑`setttings.py`模块将`EMAIL_BACKEND`变量添加到文件末尾. ##### 配置路由 密码重置过程需要四个视图: - 带有表单的页面,用于启动重置过程. - 一个成功的页面,表示该过程已启动,指示用户检查其邮件文件夹等. - 检查通过电子邮件发送token的页面. - 一个告诉用户重置是否成功的页面. 视图是内置的,需要将路径添加到urls.py并且创建模板. ##### 密码更改视图 密码更改视图仅适合登录用户,使用名为`@login_required`的装饰器,此装饰器可防止非授权用户访问此页面,如果用户没有登录,django会重定向到登录页面.