业务逻辑设计
1.urls里面写url 2.html里面填url 3.views里面写逻辑
例子:
def user_login(request):
if request.method == 'POST':
# 获取用户提交的用户名和密码
user_name = request.POST.get('username',None)
pass_word = request.POST.get('password',None)
# 成功返回user对象,失败None
user = authenticate(username=user_name,password=pass_word)
# 如果不是null说明验证成功
if user is not None:
# 登录
login(request,user)
return render(request,'index.html')
else:
return render(request,'login.html',{'msg':'用户名或密码错误'})
elif request.method == 'GET':
return render(request,'login.html')
1.构建def函数 形参写request、self
2.通过request得到数据,把数据进行计算
HTTP报文分三部分:请求行、首部、报文实体。请求行中有URL、方法。首部里有首部字段名、首部字段值,key value用冒号分割。正文,各种具体用的信息,如json格式的内容。
方法:get从服务器获取资源、post主动告诉服务器一些信息、put往指定资源位置上传最新内容(实际应用中,post常用来创建一个资源、put常用来修改一个资源)、delete 删除一个资源。
首部字段:Accept-Charset,表示客户端可以接受的字符集。Content-Type是指正文的格式,如json。
表单是一个包含表单元素的区域。表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。
而对应的html上要建立对应的form表单,并配置相应的post方法,使用相应的< input >内容。注意post要接 {% csrf_token %}。并且要加相应的if else来进行显示控制。
在必要情况下还要建forms文件夹,规定提交内容,里面写相关form.py。
3.render返回网页。render是渲染变量到模板中,render的第一个参数是request 第二个参数是模板路径 第三个参数context是要传入文件中用于渲染呈现的数据, 默认是字典格式。HttpResponse是不调用模板,直接返回数据
感触
感触最深的一点就是,所有东西都是看着简单,实际做起来却很复杂。一个富文本的功能可能就需要一上午,一个鉴权,第三方登陆也需要半天,更别说在前端上更改所花费的时间了。
环境Python Django
Django基础知识
- Python安装,Django安装。python: 3.6.4。Django: 2.0.2
...
- 一般安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.py。我们可以使用 django-admin.py 来创建一个项目。
创建完,改一些设置,如果你只需要静态页面,那么创建app,然后先在view里加个def,然再在urls里加入对应url即可。
url配置方法:
- 上面这种方法,没有用到 templates 。1.我们先创建 templates 文件夹,然后写一个带动态值的html。2.去settings里修改模板文件位置。TEMPLATE_DIRS = ( '/home/django/mysite/templates',) 3.把view里的HttpResponse改为render。
我们使用了函数 django.template.loader.get_template() ,而不是手动从文件系统加载模板。 该get_template() 函数以模板名称为参数,在文件系统中找出模块的位置,打开文件并返回一个编译好的Template 对象。这样我们才能使用render把数据传进去。当然后面又出了更简化的方案,用render_to_response('current_datetime.html', {'current_date': now}),指定好html和context即可。
Django 模板标签有的功能:if/else 标签、for 标签、ifequal/ifnotequal 标签、过滤器、模板继承。
用两个大括号括起来的文字(例如 {{ person_name }} )称为 变量(variable) 。
被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) ,可以理解为语句。
如这个例子中的{{ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同时指定参数”F j,Y”。 过滤器风格受unix影响很深。
调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换。如:c = template.Context({'name': 'Adrian'})
所以其实最为关键的就是怎么生成最后要显示的context。
- 上面这种方法,没有用到数据库。1.Django规定,如果要使用模型,必须要创建一个app。 2.settings.py中找到INSTALLED_APPS加入app。 3.修改model文件,创建好类。执行命令
$ python manage.py migrate # 创建表结构
$ python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel # 创建表结构
4.view中写增删改查代码,urls里配置url。
Django API中,各种方法:
数据过滤 Publisher.objects.filter(name='Apress')
获取单个对象 Publisher.objects.get(name="Apress")
数据排序 Publisher.objects.order_by("name")
连锁查询 Publisher.objects.filter(country="U.S.A.").order_by("-name")
限制返回的数据 Publisher.objects.order_by('name')[0]
更新多个对象 Publisher.objects.all().update(country='USA')2
删除对象 Publisher.objects.filter(country='USA').delete()
- 表单交互。HTML表单是网站交互性的经典方式。Django怎么对用户提交的表单数据进行处理?HTTP协议以"请求-回复"的方式工作。客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。
比如:1.在view中写一个搜索的函数 2.配置好url规则 3.在themplats里写好模板值。即可完成搜索功能。本质是访问这个url就进行搜索这个意思。
比如:1.写一个post页面,注意django中凡是post,都要带{% csrf_token %} 2.在view中写def函数 3.写urls完成url配置。
后面还有form类来帮助使用表单。
- 上面这种方法,没用到admin。1.去掉urls里默认是注释的admin 2.通过在admin.py里增加各种属性,可以在页面上调节显示,各项功能。
.
- 确实用django run命令就可以运行一个django项目了,但是如果想更稳当,需要使用Nginx+uwsgi 服务器。当然本次毕设考虑。
.
- 以hello为例,总结一下django的流程。
进来的请求转入/hello/.
Django通过在ROOT_URLCONF配置来决定根URLconf.
Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
如果找到匹配,将调用相应的视图函数
视图函数返回一个HttpResponse
Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
- 以8的例子,如果我要加更多的功能,那么应该再view里写更多的def视图函数。
.
- 动态URL。尽管内容是动态的,但是URL ( /time/ )是静态的。 在 大多数动态web应用程序,URL通常都包含有相关的参数。 举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/、/books/81196/。
那么,我们如何设计程序来处理这种后面是动态的网页? 答案是:使用通配符(wildcard URLpatterns)。正如我们之前提到过,一个URL模式就是一个正则表达式。因此,这里可以使用d+来匹配1个以上的数字。并且这时候,你view里视图函数的参数就会增多了,比如变成def hours_ahead(request, offset)(变量名是无关紧要的,重要的是它的位置,它是这个函数的第二个 参数 (在 request 的后面)。 )
-
开启Session。1.编辑settings。 2.确认 INSTALLED_APPS 中有 'django.contrib.sessions' (如果你是刚打开这个应用,别忘了运行manage.py syncdb ) 3.在view中使用session
.
准备工作pip安装
1.后台admin升级为xadmin2.0,并添加xadmin插件。
使用介绍
官网
例如:富文本编辑插件。Xadmin 插件开发之富文本编辑器 ueditor、主题插件theme、美化插件suit。
https://www.jianshu.com/p/7d4d403d2977
完成数据的显示、图标,更新。xadmin+echart显示图表
目标:1.xadmin的安装和使用 2.xadmin插件ueditor、theme、suit、echart的使用。
步骤:
2.第三方登陆第三方权限 选微博、微信、百度、Github、allouth除了提供第三方登陆还提供了注册功能。
相关教程
目标:第三方登陆的使用。选微博、微信、百度、Github、allouth除了提供第三方登陆还提供了注册功能。
目标:支付宝付款的使用。
4.全局搜索haystack教程 haystack是一个搜索框架,可以给你搜索出相关的东西,具体搜索引擎都是自己设置的,whoosh还是ES自己选。
ES
目标:ES的使用。
5.图片文件上传管理 django-filer
目标:图片上传的使用。
6.swagger文档生成器swagger
目标:swagger的使用。
7.用户通知django-notifications
目标:用户通知的使用。
8.邮件发送邮件
目标:邮件发送的使用。
9.绘制models依赖,论文阶段使用link
项目设计
演示
前台
1.前端页面完成 2.前端页面加入修改的部分,完成动态模板。 3.进行页面优化。
后台:
1.数据库设计 2.django里面python代码完成,完成model层,生成admin页面。 3.完成view层,同时配置好url。
系列
http://blog.mtianyan.cn/post/8b4c6c13.html
http://www.cnblogs.com/derek1184405959/
https://github.com/derek-zhang123/MxOnline
https://github.com/zaxlct/imooc-django
https://github.com/Liweimin0512/ImitationTmall_Django
项目部署
http://blog.xander-ye.com/hello-docker/
https://www.cnblogs.com/xiao987334176/p/10276143.html
通过docker部署django项目。思路是配置好dockerfile文件,把django打成tar包,放进docker容器。预计一天时间。
首先给机器安装python 3.6.0,pycharm,并且通过pip在本机中安装django。
步骤:
1. 在pycharm里创建好项目,运行调试完毕。
.
- 完成docker项目配置文件设置,即新建并完成dockerfile、pip.conf、requirements.txt.完成三者即可打包,docker build成一个镜像。
(这里Django项目也有一些需要修改)配置文件修改这里可以使用一键命令dockerfile见链接,但是要注意的是django的docker源才支持到2.0版本。
- 把生成的镜像从本机推送到云端,这里使用阿里云的镜像仓库(这里对标的就是docker的dockerhub,只是那边网速不好)。然后阿里云死活连不上,于是开加速器用dockerhub传了。
具体步骤为1.在阿里云网站新建镜像仓库,并配置登陆账号密码。 2.在本机先docker login进入阿里云镜像仓库,然后按照手册(docker images查看id,docker tag 修改tag,docker push上传),把自己镜像push上去。这里需要注意的是下载用的是公网地址,上传用的是专用地址。这里本机上传失败。上传dockerhub成功。
这里的原因可能是阿里云的tag前也要按规定加目录。
- 把云端的镜像在服务器机子上下载,并启动。
任意一台安装了docker的机子,用docker pull下载到dockerhub中的镜像,直接run即可。
部署工作
快速生成requirement.txt的安装文件 pip freeze > requirements.txt
安装所需要的文件 pip install -r requirement.txt
这里有两种方案,目的都是为了降低部署错误的风险,一是Pycharm远程连接,直接配完参数后,本地运行就是服务器上运行。二是打包成docker镜像运行,后者更为普及有效。
Comments | NOTHING