业务逻辑设计

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教程
  django系列博客
  部署教程

Django基础知识

  1. Python安装,Django安装。python: 3.6.4。Django: 2.0.2

...

  1. 一般安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.py。我们可以使用 django-admin.py 来创建一个项目。

  创建完,改一些设置,如果你只需要静态页面,那么创建app,然后先在view里加个def,然再在urls里加入对应url即可。

  url配置方法:

  1. 上面这种方法,没有用到 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. 上面这种方法,没有用到数据库。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()

  1. 表单交互。HTML表单是网站交互性的经典方式。Django怎么对用户提交的表单数据进行处理?HTTP协议以"请求-回复"的方式工作。客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。

  比如:1.在view中写一个搜索的函数 2.配置好url规则 3.在themplats里写好模板值。即可完成搜索功能。本质是访问这个url就进行搜索这个意思。
  比如:1.写一个post页面,注意django中凡是post,都要带{% csrf_token %} 2.在view中写def函数 3.写urls完成url配置。

  后面还有form类来帮助使用表单。

  1. 上面这种方法,没用到admin。1.去掉urls里默认是注释的admin 2.通过在admin.py里增加各种属性,可以在页面上调节显示,各项功能。

.

  1. 确实用django run命令就可以运行一个django项目了,但是如果想更稳当,需要使用Nginx+uwsgi 服务器。当然本次毕设考虑。

.

  1. 以hello为例,总结一下django的流程。

  进来的请求转入/hello/.

  Django通过在ROOT_URLCONF配置来决定根URLconf.

  Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

  如果找到匹配,将调用相应的视图函数

  视图函数返回一个HttpResponse

  Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

  1. 以8的例子,如果我要加更多的功能,那么应该再view里写更多的def视图函数。

.

  1. 动态URL。尽管内容是动态的,但是URL ( /time/ )是静态的。 在 大多数动态web应用程序,URL通常都包含有相关的参数。 举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/、/books/81196/。

    那么,我们如何设计程序来处理这种后面是动态的网页? 答案是:使用通配符(wildcard URLpatterns)。正如我们之前提到过,一个URL模式就是一个正则表达式。因此,这里可以使用d+来匹配1个以上的数字。并且这时候,你view里视图函数的参数就会增多了,比如变成def hours_ahead(request, offset)(变量名是无关紧要的,重要的是它的位置,它是这个函数的第二个 参数 (在 request 的后面)。 )

  2. 开启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除了提供第三方登陆还提供了注册功能。

3.支付宝支付详细教程
  教程

  目标:支付宝付款的使用。

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里创建好项目,运行调试完毕。

.

  1. 完成docker项目配置文件设置,即新建并完成dockerfile、pip.conf、requirements.txt.完成三者即可打包,docker build成一个镜像。

  (这里Django项目也有一些需要修改)配置文件修改这里可以使用一键命令dockerfile见链接,但是要注意的是django的docker源才支持到2.0版本。

  1. 把生成的镜像从本机推送到云端,这里使用阿里云的镜像仓库(这里对标的就是docker的dockerhub,只是那边网速不好)。然后阿里云死活连不上,于是开加速器用dockerhub传了。

  具体步骤为1.在阿里云网站新建镜像仓库,并配置登陆账号密码。 2.在本机先docker login进入阿里云镜像仓库,然后按照手册(docker images查看id,docker tag 修改tag,docker push上传),把自己镜像push上去。这里需要注意的是下载用的是公网地址,上传用的是专用地址。这里本机上传失败。上传dockerhub成功。

  这里的原因可能是阿里云的tag前也要按规定加目录。

  1. 把云端的镜像在服务器机子上下载,并启动。

  任意一台安装了docker的机子,用docker pull下载到dockerhub中的镜像,直接run即可。

部署工作

快速生成requirement.txt的安装文件 pip freeze > requirements.txt

安装所需要的文件 pip install -r requirement.txt

这里有两种方案,目的都是为了降低部署错误的风险,一是Pycharm远程连接,直接配完参数后,本地运行就是服务器上运行。二是打包成docker镜像运行,后者更为普及有效。

有用的链接

Django 引入markdown搜索
慕课网参考项目
Django容器打包部署
html5up