django+xadmin在线教育平台(四)
3-2 配置表单页面
必要的该说的,该了解的
前置条件:
你已经学习了前面教程。将项目的文件夹目录结构,setting配置等修改完毕与我保持一致。
本节通过Django快速的配置一个留言板页面来学习
Django从请求到响应的整个完整流程。为我们开发在线教育平台打下基础。

上图便是本节教程所要用到的静态页面: 前往Github下载:form.html
具体的业务:填写信息 -> 然后点击提交 ->数据被存储到数据库。
这个html是一个单文件,里面已经包含了css js内容。
将html文件整合进项目操作步骤
将html文件直接复制进templates目录.

创建static目录下的css文件夹 和 static/js
- 在css中再新建一个
style.css

form.html中点击<style>标签左侧减号。将style内容收成一行。然后把这一行内容剪切粘贴到style.css

粘贴进去之后,将首尾两个
<style>删除,shift + tab可以将css格式化更整齐。在
form.html新建<link>来引入css。(文件里其实已经先加上了,学一种操作而已)
<link rel="stylesheet" href="/static/css/style.css">
配置Django连接Mysql数据库
在setting.py 大概80行找到:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
这是Django默认与自己项目根目录下的db.sqlite3连接的设置。

我们的项目是与mysql连接,所以我们要改成如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdjango',
'USER': 'root',
'PASSWORD': '密码',
'HOST': "127.0.0.1"
}
}
其中的name应设置为我们中在Navicat中新建的数据库名字。名字一定要保持一致
这时要将我们之前建的表提前全部删除掉。

配置mysql驱动和seeting文件。
点击Tools 菜单下 Run manage.py Task我们会发现报错了:
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
由错误信息我们可以看出是因为没有安装数据库驱动模块
MySQLdb

cmd下workon进我们的虚拟环境目录。pip install mysql-python
然后会发现报错:

_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':
No such file or directory error: command
'"C:\Users\mtian\AppData\Local\Programs\Common\Microsoft\Visual C ++
for Python\9.0\VC\Bin\amd64\cl.exe"' failed with exit status 2
前往地址 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
下载MySQL_python_1.2.5_cp27_none_win_amd64.whl到本地,放到桌面。
然后使用下面命令进行安装:注意是在虚拟环境下。
cd Desktop
pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl

这个时候我们再次点击Tools 菜单下 Run manage.py Task会看到已经没有刚才的错误。

但是会有红框里的警告,面向强迫症解决方案是在setting.py 新增STATIC_ROOT = '/static/'
但其实现在还没有用到这个参数。后面用到我们再配置。(推荐自行克服强迫症)
输入下面命令来生成表:
makemigrations
migrate

这时我们去Navicat查看会发现为我们生成了很多表。

这些都是Django系统默认的内置数据表。
做完这些操作我们可以点击Run来运行项目,
然后到http://127.0.0.1:8000/来访问看是否运行成功。成功页面(It worked)
配置form页面展示出来:
DjangoGetStarted/urls.py修改如下:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^form/$', getform) #这行是新增加的.
]
新增加url(r'^form/$', getform),^是代表以form为开头,$代表以/结尾的地址。
这里getform 是对于这个url的相应处理的view。我们先去创建一个.
message/views.py添加如下代码:
def getform(request):
return render(request, 'message_form.html')
request 参数是一个django的http request对象。(基础)
这里我们可以按住ctrl + 左键 跟踪到我们的render函数里面。
Alt + 左箭头 回来。
def render(request, template_name,...):
源代码解读:可以看到我们的render需要一个request对象和template_name参数
注意:记性好的还记得我们提供的源文件是form.html
知识点:django内置了很多html页面,form会先从内置中寻找。所以我们得改。
因此我们需要右键如下图Refactor修改from.html 为message_form

如果我们的项目在运行,ctrl + s会自动重启我们的项目。
这时我们有了view,我们可以去配置完整的url了(前面已经配完整的检查一遍):
DjangoGetStarted/urls.py
from message.views import getform
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^form/$', getform)
]
这里我们不能加括号否则会变成方法的调用。
按住ctrl + render 跟踪到我们的url函数里面查看源码如下:可以看到它除过一组正则表达式,还需要接收一个view对象。
def url(regex, view,...):
如果getform加上括号会报错:
TypeError: getform() takes exactly 1 argument (0 given)
访问http://127.0.0.1:8000/ 正常结果:Page not found
Using the URLconf defined in DjangoGetStarted.urls, Django tried these URL patterns, in this order:
^admin/
^form/$
是因为我们在url中加入了个人的配置^form/$,它就不会采用默认配置了。
原因:(源码探究标记点)
这时访问:http://127.0.0.1:8000/form/
旧版本pycharm会报:TemplateDoesNotExist错误。我的新版本pycharm并没有出现。
重要代码在DjangoGetStarted/settings.py 60行左右
# 指明我们的templates目录路径
'DIRS': [os.path.join(BASE_DIR, 'templates')]
# 老版本pycharm创建django项目该值为空。
现在再次访问 http://127.0.0.1:8000/form/
页面出来了但是样式没有。static目录下的css文件提示没有找到。

Setting中静态文件的配置,这是因为我们setting中的
STATIC_URL = '/static/'
只说明了目录的名称。并没有指明查找的根路径。添加下面代码:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
过程中看似不停的出错,其实是为了让大家更好记住该记住的。
项目配置流程图
我们刚才是以倒序:
- 把html文件放进来
- 通过简单的url配置来访问html。
- 发现找不到页面,所以我们设置setting中
DIRS - 文件找到了又说找不到静态文件,我们设置了
STATICFILES_DIRS

这是我们的整体流程图,推荐新建一个项目再按照正向流程图来一遍。
后面我们的工作会围绕从migration生成数据表往下的内容展开。
原文学习来自简书,作者:天涯明月笙
原文链接:https://www.jianshu.com/p/783ac2f28027
django+xadmin在线教育平台(四)的更多相关文章
- django+xadmin在线教育平台(一)
大家好,此教程为在慕学网的实战教程Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台的学习笔记,不对望指正! 使用Django+Xadmin打造在线教育平台(Python2, ...
- django+xadmin在线教育平台(五)
3-3 django orm介绍与model设计 上节教程完成后代码(来学习本节前置条件): 对应commit: 留言板前端页面展示.本次内容截止教程3-2结束. 可能现在你还在通过手写sql语句来操 ...
- django+xadmin在线教育平台(十)
剩余app model注册 courses注册 新建courses/adminx.py: # encoding: utf-8 __author__ = 'mtianyan' __date__ = '2 ...
- django+xadmin在线教育平台(十四)
7-1 django templates模板继承1 机构可以筛选类别 机构可以根据所在地区进行分类 右侧我要学习功能: form表单提交 右下:授课机构排名 页面头部与底部为全局头和全局底部. Dja ...
- django+xadmin在线教育平台(十六)
7-7 modelform 提交我要学习咨询1 对应表userask form会对字段先做验证,然后保存到数据库中. 可以看到我们的forms和我们的model中有很多内容是一样的.我们如何让代码重复 ...
- django+xadmin在线教育平台(六)
4-1 使用py3.6和django1.11开发系统前注意事项 直接通过Python3.6和django最新版本来开发我们的系统的一些注意事项. 原版本: Python 2.7 & djang ...
- django+xadmin在线教育平台(十七)
8-1 课程列表 拷贝课程列表页到template目录 创建课程相关的urls.py Mxonline2/urls.py中声明包含到course的url中: # 课程app的url配置 url(r&q ...
- django+xadmin在线教育平台(十五)
7-4 课程机构列表页数据展示2 前去html中进行数据填充 mark 可以看到所有城市是通过a标签,当前选中城市为active. mark 之后把下面的写死的城市删除掉. mark 这时 ...
- django+xadmin在线教育平台(十二)
6-4 用form实现登录-1 上面我们的用户登录的方法是基于函数来做的.本节我们做一个基于类方法的版本. 要求对类的继承有了解. 基础教程中基本上都是基于函数来做的,其实更推荐基于类来做.基于类可以 ...
随机推荐
- FileTest
package com.yd.wmsc.util; import java.io.File; public class FileTest { public static void main(Strin ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- 《从0到1学习Flink》—— Data Sink 介绍
前言 再上一篇文章中 <从0到1学习Flink>-- Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧. 首 ...
- <Openssl下hash函数>
hash函数:是不可逆的函数,它的输入可以是任意长度的字节流.它的输出是固定大小的,hash函数的作用就是给你的文件产生一个摘要,它是独一无二的. 例如:y=f(x) x代表输入 y代表输出 输 ...
- ActionListener 监听事件源产生的事件
用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如ActionEvents,ChangeEvents,ItemEvents等,来响应用户的鼠标点击行为.通过实现ActionList ...
- RabbitMQ:消息发送确认 与 消息接收确认(ACK)
默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除 如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则 ...
- kickstart2019 round_A B. Parcels
思路: 利用了曼哈顿距离和切比雪夫距离之间的转化. 参考: https://blog.csdn.net/Dylan_Frank/article/details/88985444 https://www ...
- 【Java】Maven 常用命令
Maven 常用命令 mvn compile 编译,生成target文件夹,里边有classes文件夹,存放.class文件 mvn test 执行测试 mvn package 打包,在targert ...
- MATLAB之折线图、柱状图、饼图以及常用绘图技巧
MATLAB之折线图.柱状图.饼图以及常用绘图技巧 一.折线图 参考代码: %图1:各模式直接成本预测 %table0-table1为1*9的数组,记录关键数据 table0 = data_modol ...
- 第2章 核心C#
1. 变量 1.1 变量需要遵循的规则: 变量必须初始化 初始化器不能为空 初始化器必须放在表达式中 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象 1.2 变量的作用域 只要类在某个 ...