小司机带您学: Django+Xadmin打造在线教育平台[Python2&3通用 ](三)-3&4&5葡京娱乐总站平台

第一次原型出来基本没考虑用户采用境况,和真实需求怎么样的,完全是协调想着就做了,然后评审的结果就毫无说了,想想就领悟啊!一向到第二次、第三次之后才改为了现行这个样子,最终文档出来测试研发一脸懵逼,标注之类的写的乱七八糟的,现在和美观着也是二脸懵逼。整个东西从原型到成品到为客户做商品详情文案到结尾做营销H5,两个周时间,小白当时做得真的挺累的,不过收获也仍旧满满的,尽管这一个序列现在曾经死了(当时是定向面向首都用户的,妈蛋人家一听是特别海域的海鲜直接就回身走了……,怪不得人家给30%的点,所以说啊,天上没有掉馅饼的事情……),踩在这些已死去的连串头上自己终究有了有些实战经验,勉强“进入”了出品岗位。

介绍Meta信息:

Meta消息中大家得以指定常见的项目:

db_table = "user_meassage"

自定义后生成表,表名会与大家的保持一致。而不会前缀appname如:message_

这里因为大家早已生成过了,就无须做表达改变表名了。

ordering = '-object_id'

ordering指定默认排序字段,如:就会以object_id倒序

verbose_name_plural = u"用户留言信息"

verbose_name_plural:复数消息,便于人读书。否则会在后台显示用户留言信息s

早就学习完毕了orm将数据表映射表。
github地址:https://github.com/mtianyan/DjangoGetStarted
此节截至对应github commit:

留言板数据库orm映射成表完成。内容为止教程3-3完毕。

一个成品定位、目的都不清楚的成品,再是消耗多少人力物力,多少资源在上头也不自然有好的结果,当然这几个也不可能相对,大道五十,天衍四十九,而转变什么人也说不清。剑走偏锋的事不属于正常情状,而我们谈谈的制品正不在此。有了强烈的产品一定,才可能有科学的产品需求,而接下去需要做的不是直接投入研发和资源去研发、推广,而是先去表明要求。

Models讲解

除过普通的附和数据库的字段类型如CharField,还有好多尖端项目。如EmailField提供email验证。

    models.ForeignKey     # 外键
    models.DateTimeField  # 时间字段
    models.IntegerField   # 整型
    models.IPAddressField # IP地址
    models.FileField      # 上传文件
    models.ImageField     # 图片

ctrl按住+左键点击models
进入之后点击fields拖到文件开端可以看看所有字段:

__all__ = [str(x) for x in (
    'AutoField', 'BLANK_CHOICE_DASH', 'BigIntegerField', 'BinaryField',
    'BooleanField', 'CharField', 'CommaSeparatedIntegerField', 'DateField',
    'DateTimeField', 'DecimalField', 'DurationField', 'EmailField', 'Empty',
    'Field', 'FieldDoesNotExist', 'FilePathField', 'FloatField',
    'GenericIPAddressField', 'IPAddressField', 'IntegerField', 'NOT_PROVIDED',
    'NullBooleanField', 'PositiveIntegerField', 'PositiveSmallIntegerField',
    'SlugField', 'SmallIntegerField', 'TextField', 'TimeField', 'URLField',
    'UUIDField',
)]

小白认为产品的定位应该来自六个方向:首先从商业利益出发,没有商业价值的出品算不上真正的成品;其次从用户角度出发,没有用户参与的制品不是好的产品;最终从类型角度出发,适应当前生产力与物资的出品才是适合自己的成品。

在setting中登记我们的app

DjangoGetStarted/settings.py 大概36行INSTALLED_APPS:

`INSTALLED_APPS`
[
    前面的不用变,后面新增下一行
    'message'
]

这时候我们重新运行Tools 菜单下 Run manage.py Task会提示:

假定提醒:

SyntaxError: Non-ASCII character '\xe7' in file D:\CodeSpace\PythonProject\DjangoGetStarted\apps\message\models.py on line

请小心可能您忘掉在写过粤语的地方加上:

#coding: utf-8

小心必须加在第一或二行。

然后实施下边发号施令:

makemigrations message

mark

migrate message 生成数据表

mark

前往Navicat验证:

mark

可以观察我们的数据表已经创造成功。默认数据表名称为app名称_类名转换为小写
自动生成的id作为主键。

看完是不是很想死的痛感,东西很少,很粗略,但也很Low,哈哈,要看了后台就更想死了!好在该有的东西仍然基本没落下,说实话,现在让自己再也做也无法保证好上有些。

3-4 django model的增删改

github仓库地址:https://github.com/mtianyan/DjangoGetStarted

  • 上小节完成代码对应commit:
    留言板数据库orm映射成表完成。内容截止教程3-3完毕。

message/views.py中:

from .models import UserMessage

将我们刚刚创设的model,import进来。.代表是与当下同级的目录。

按部就班下图所示添加一条测试数据。

mark

然后再大家的getform办法内部添加底下代码:

def getform(request):
    # UserMessage默认的数据管理器objects。
    # 方法all()是将所有数据返回成一个queryset类型(django的内置类型)
    all_message = UserMessage.objects.all()

    #我们可以对于all_message进行遍历操作
    for message in all_message:
        # 每个message实际就是一个UserMessage对象(这时我们就可以使用对象的相关方法)。
        print message.name

    return render(request, 'message_form.html')

调剂过程:

mark

  • 点击上图小红框地点,打上断点。

  • 点击Run -> debug后:在浏览器里打开:http://127.0.0.1:8000/form/

mark

  • 弹出上图表示已跻身断点。

mark

  • 此刻鼠标左键点击:all_message.可以见到这是一个{QuerySet}类型的对象,里面存放着[<UserMessage: UserMessage object>]

  • f6使运行到下一步。此时下方的值窗口内可以看来message的值。表明大家成功取到了数据库的值。

mark

切切实实确实这样美好、一帆风顺呢?带着一颗朦胧的心,7月鼓起勇气辞职面试了成品岗位,而我的大运还不是相似的好,居然通过了面试(当然我自己仍然清楚的,我实在什么都不懂,除了会用几个工具……)。下午10:00来临现在的店堂面试完,当时HR告诉我,前天您的依附上司不在公司,回去等信息(其实当时就根本没怀希望,人家肯定是腼腆直接拒绝我这白痴,在给自身找借口吧)。可是由于一颗心的执着,我就这么带着忐忑的心态进入了“漫长”而熬人的等候(还记得面试那边是十二月15日-礼拜天-裸辞第二天),等到周末自家实在等不下去了,主动打电话问了面试我的HR,感觉挺窘迫的,你究竟要不要我哟,不要你也报告我一下啊,是吗!男子汉大大丈夫,18年后哥又是一条好汉(没这样严重啦……)。然则事实是HR给了自我一个很懵逼的答疑:你规定要来吗?要来的话你周五来报道!(我确实蒙了,wo艹,我来面试还打电话给你你以为握手豆你玩么,居然问我是否确认真的要来),然后我在想,是不是那公司水的百般啊?怎么会这么问啊?或者是中间竞争可以?或者是时刻加班?或者是店铺要垮啦?但想想当时和好去面试的时候不像要跨的榜样呀!我确实懵逼了!(其实这里表达,机会是友善争取的,只有团结主动的力争时机机会才可能会属于你;在面试完不要就杳无音讯的默不作声了,积极主动的去交换奖可能得到任用的几率会大大提高)

原生sql 与 orm

从不orm 的状态下message/views.py代码:

import MySQLdb

# 使用原生sql获取书的列表
def book_list(request):
    # 创建到数据库的连接: 指明用户名,数据库,密码
    db = MySQLdb.connect(user = 'me', db='mydb', passwd='secret', host='localhost')
    # 创建一个游标对象执行器
    cursor = db.cursor()
    # 书写我们需要的sql语句
    cursor.execute('SELECT name FROM books ORDER BY name')
    # 对于fetchall()的结果做遍历,将遍历回来的结果当做数组,取第0个值name。
    names = [row[0] for row in cursor.fetchall()]
    db.close()

同意可以让数据库字段的询问和应用类的一个特性一样简单?没错登登登:orm上场了

book:name

book.name
book.save()

Django的orm就是为着让我们不再写上边这样的口舌,而是像使操作数据库像使用类和类属性一样。

如今中午尝听易经解读:人生什么最要紧,定位和大势。定位是什么?即大家现在的“地址”,要到达的“地址”,至少有了三个点,然后才有了趋势;最后决定你是否到达终点的本色原因不是你的速度有多快,而生你的主旋律准不准,在错误的矛头上你只会越走越远,当然或许远方有更美的所见所闻。而易经最基础的就是一定,讲究以卦位定乾坤:六阳为乾,六阴为坤。太极生两仪,两仪生四象,四象生八卦,八卦衍天下。天地乾坤变幻无穷,终其一矣,卦也,卦者,位也。这是想说做一件事伊始之初定位很重大。儒家也有云:道生一、一生二、二生三、三生万物、万物无极;此处无极不是说没有极限,而是说不是未曾终点。儒家云:阴阳循环,佛语云:生死轮回。皆起于易经:天地无极,物极必反。

filter取出指定要求值

all_message = UserMessage.objects.filter(name=' mtianyan', address='西安')

mark

遵照地点调试过程重新调试可以见见我们同样取出了值。

小训练:将名字改为与友好数据库存放值不同的。查看结果。

mark

变成了空列表,表明所有正确。

对此自己个人来说:一件工作尽管结果很要紧,但经过一样也紧要。我曾有很长一段时间特别欣赏一句话:“尽人事听天命!”,做自己能做的,放下自己不可能做的(这句话应该仍旧在我初中的时候看看并喜欢的,这时候先河成绩糟糕,也不想学,于是就喜爱了这句话,觉得古人讲的很对,我就不是阅读的人,干呢非要读书呢……,当然前边好像不这么想了!)。至于后边的改动就不多说了,每个人走过的路不尽相同,哪怕同一家庭内部的兄弟姐妹,同一班上的同窗朋友,一贯于一致集团一如既往机关的同事等等。每个人都有和好人生的转向点,生命中总会在某一个时而又有些人或局部事促使你真正去改变(用一句话形容就是:意外和前日,什么人也不晓得谁先来到),不要说您不会变动,一个人的改观是一个亟需时日积蓄的业务,当一雨后春笋的报应展现在您眼前的时候,你当然的会去想想,会生出变更,那也是为什么许五个人会被洗脑,然后又会醒来(说多了……)。

Navicat举办求证

可以看来成功的添加了数量mtianyan2

mark

继承到近年来一向接手了年会大师平台下的五个小项目:背景墙(图片/视频)、年会邀请函、礼物榜寄礼品的宏图及年会颁奖。多少个品种下来也让我尝遍了产品路上的坑,毕竟是小白,加上自身这人有一个糟糕的习惯很多政工总喜欢自己去琢磨、自己去注解。虽然自己也常说站在巨人的肩头上我们会爬得更快、走得更远、站的更高,叫借势吧,通俗点就是向外人的经验,向其别人请教!但本身偏偏喜欢作死,因为我总认为很多工作或者友好去讲明才能当真知道干什么会这么,产品路上的坑对于我的话也是如此。说实话,后边五个东西集团研发的同桌估算都不想做自我的事物了,还好集团有多少个研发组分别分开对接,而不是联网平素接通一个组,相对来说可能在时光和空降以及激情上都有点缓和,自己也挺难堪的,自己踩坑还得带上一堆人随后我踩,可是总的来说经过多少个品类实战下来,收获累累,现在好多了。

slice

mark

官方文档解释:其实就是切片操作。从头起始切到第n个。

个人执行:

mark

本来mtianyanmtianyan1是不同的,可是切片后前八位相同。
葡京娱乐总站平台,运行结果显示 :对应中文昵称:天涯明月笙

起来还有一个构想,借用直播的红包系列,不只有送,仍能兑换,提现,即获取红包的人得以报名提现(平台扣去一定比重),而送礼者拿到积分可用于抽奖或者直接兑换其他平台物品。这样可以让送的人从没后顾之忧(目前送了俺们是不还钱,送的是真金白银啊……),而这样可以让年会真的欢才畅起来,公司花几十万办年会不就是让大家在回家前喜笑颜开三次、给有才艺的人一个显示的空子、进步我们的交流互换机会,韵养集团公司文化呢?所以直播的这套路在年会现象中仍是可以够走通,事实讲明也是如此(很多商厦听说送了是白送直接回限制员工充值……),可是最后副总拍板不做,这就不做呢,我又低头了,何人让咱是新人呢,产品在此之前也没怎么数据积累,大家快意就好!

数据库新增。

request.POST中数量取出,存入user_message对象

 # html表单部分

    # 此处对应html中的method="post",表示我们只处理post请求
    if request.method == "POST":
        # 就是取字典里key对应value值而已。取name,取不到默认空
        name = request.POST.get('name', '')
        message = request.POST.get('message', '')
        address = request.POST.get('address', '')
        email = request.POST.get('email', '')

        # 实例化对象
        user_message = UserMessage()

        # 将html的值传入我们实例化的对象.
        user_message.name = name
        user_message.message = message
        user_message.address = address
        user_message.email = email
        user_message.object_id = "ijkl"

        # 调用save方法进行保存
        user_message.save()
  • 打断点在下图地方:

mark

  • 进入调剂:点击点击method:是get请求。因为我们并不曾按提交按钮,而是get那一个网页

mark

  • 点击f8延续运行我们的门类 浏览器中填入表单内容点提交。

mark

因为本次是表单提交,已经变成了post格局。按f6开展单步调试。

平素单步到如下图棕色

mark

这时候值浏览窗口可以看来

mark

自我批评我们的user_message对象的属性是否业已整整添加进去,

接纳f8 继续项目并前往Navicat验证

mark

能够看看我们的数据库中一度新增,标志着大家已经成功存入数据。

其六个类别是礼物榜,这是商家二〇一九年项目中绝无仅有赚了钱的东西(宝宝心中苦,但宝宝也笑着说),尽管总体看来完全是无济于事,但有得赚点总比没有好嘛,是啊!也不得不如此安慰自己了。项目做出来自我的率先深感是直接打回去不想要的,因为太丑了,效果也不佳,但当时已经是六月了,没时间了,最终迫于岁月和资源的关联,我又低头了——就如此吧!用途就是在所有年会任什么日期刻如若打开送礼物观众都得以为节目演员送礼物,后台总计金币数量。表明观众对节目演员的辅助及可用于节目评选,场控人员随时可以切出礼物榜(礼物排名),而过四个人在年会中想要捧主管仍然上司甚至自己暗恋的女神/男神什么的就会砸钱捧,思路来源于直播送礼,大家也是刚刚利用观众的这些思想,总的下来赚了大多10w,固然少,但这是白赚的(基本不占用多大服务器资源,因为内容是缓存到用户端本地的,后台只担负总计下多少,而服务器人家送或者不送我们都是要开的……)。

在前端页面中放入值。

为input序列标签添加value:
使用my_message.name取到我们传递过来的my_message目的的属性值。

        <input id="name" type="text" name="name"  
        value="{{ my_message.name }}" class="error" placeholder="请输入您的姓名"/>

请自行完成姓名,邮箱,联系地址六个input标签。

textarea标签添加值

mark

        <textarea id="message" name="message"  
        placeholder="请输入你的建议">{{ my_message.message }}</textarea>

运作品种,访问:http://127.0.0.1:8000/form/

mark

打响!!大家早就将后台数据库数据成功显示到前台。

以下说说这一年的所得所失:人生有得必有失,不要只看见你收获的,却看不见你失去的;也别只见到您错过的而看不到你取得的!前者易傲然自满,终失去一切;后者易自惭形秽,不敢拥有。

常用的三种模板标签介绍:

第一个品种是背景墙,说起来的确很简单,还没ppt强大(差远了……)。就是一个图片/录像与背景音乐、特效的三结合作为舞台背景,就如此一个粗略的东西,我也能把她做出过多坑来。第一个坑:预览的坑,我们的大屏比例是按部就班规范高清大屏的尺码比例1920×1080(16:9)来做的,因为预览图的大大小小比例还和社稷师撕了一顿,而最后的结果是自己败下阵来,预览图被做成了1:1的方形。导致现在用户上传图片后就问,你们这怎么回事,遵照你们比例做的图啊,怎么变形了(大哭);第二个坑:上传的坑,为通晓决用户上传大体积的视频或音乐失利的题目,大家做了断点续传(图片、视频、音乐),因为那多少个事延迟上线一个周,上线后还在持续修改(大醉),这也是产品和研发双方都尚未丰裕的阅历造所致;第两个坑:为领会决用户录像转码难,不会转的题材,在线解码的题目,也是大约是因为我们都不曾经历,首先不造阿里服务器能转哪些格式,纠结和验证花了一天,然后不知底原来视频转码除了确保原录像能播放、后缀在我们的解码范围之外还亟需视频本身必须带上对应的文件格式参数,这些是上线后才发觉的,然后就是转成功后怎么通告用户的问题(间接举报情状),这么一个东东也纠结了大多一天;第六个坑:我们究竟允许用户传多大,是否限制数量,引起那多少个问题的因由是太小无法满意要求,太大到时候播放会有题目,且转码什么的都亟待开销,最终汇总各端意况提交了一个当下来看我们都能接受的值(图片5M之内、视频1G之内、音乐10M以内),这毕竟一个很广阔的限定的,虽然依旧有微量用户会认为不够,但好在不多,而减去一下也全然能承受;另外就是要不要活动做缩减的问题,不做压缩在线播放对网速和电脑硬件性能都有很高的要求,而我们才开端、没用用户数据,最近我们的用户的具体情状不精晓(用哪些电脑、什么系统、浏览器、网速等其他因素……)。就这么一个概括的职能目前相比严重的就有这么多坑,详细情状其实更要紧(大哭)。

URl的别名设置技巧

DjangoGetStarted/urls.py:

r'^form/$'添加别名:

    url(r'^form/$', getform, name = "form_new")

前去html中修改action地址为下边所示:

<form action="{% url "form_new" %}" method="post" class="smart-green">

这时我们只要改动urls.py中的r'^form/$'不需要再修改前端代码中值。

废话太多,中间经过就不一一描述了,那些系列——也就是自己的处女作,其实说真话做得有点糟糕。当时领受这东东我的确吗都不懂,搞了六个原型出来差点吓着业主和研发的二弟们了(还有产品的妹纸……),现在看起来也吓到了自身要好。我都在怀疑研发的四哥们是怎么码出来的,过程十分的辛勤,事实阐明产品并未实战的彩排基本在聊天,上战场就全乱了阵脚。废话,间接上图:

什么从html的交给中取到数据并保存进数据库

templates/message_form.html:

mark

method是post。action就是指向我们在urls.py中布局的/form/
面前必须加斜杠指根路径下form
个中的input会自动把值传递给后台:这时我们就足以在getform中取到刚才传递过来的值。

运作项目:然后输入需要填写的值。点击提交:出现403荒谬

Forbidden (403)
CSRF verification failed. Request aborted.

基于提醒:我们的页面没有开展crsf的印证,这时django的平安机制,不同意任意form都将来台提交。

知识点:所以我们需要在html页面中投入csrf_token

    {% csrf_token %}

mark

土生土长这行删除掉。打上断点

mark

刷新页面并付诸。这时候在值窗口可以看到request对象下的POST中存放着我们付出的多少。内容如下

<QueryDict: {u'message': [u'\u54c8\u54c8'], u'address': [
u'\u897f\u5b89\u5e02'], u'csrfmiddlewaretoken': [
u'uIYSMOTWPJBPOPucRwd3uDaWtCzeEaem'], u'name': [
u'\u5929\u6daf\u660e\u6708\u7b19'], u'email': [u'1147727180@qq.com']}>

mark

数据以dict:key-value 情势储存 key是由如下图html中的name所决定对应的。

mark

从互动需求到结尾我共讲了一次详细要求宣讲(还带着分析数据、接口等),也改过一回次需求(修改了多少个大本子,在成品形态上才终于定了下去)。因为是各种组都有成员在做,有些人只是非常接数据,因而上线必须联调,而联调的时候我们坐在一起,懵逼了!!!你的想法和我的咋不等同的,大家需要如此的数量,你给自身的非正常啊,你怎么是那样的哎!我擦。尼玛完全对不上号啊!然后就是我有再一次召集所有相关人仔细为他们分析了数码逻辑,当场确认所有的多寡对接能无法接上,怎么对接等一序列相应有项目主任做的政工,并记下会议内容邮件抄送所有人。开完会自己真的很懵逼,当时始于做的时候不是赤诚的告知自己没问题,这一个你们会友善着想的啊?我想骂人,没办法,谁让产品是我自己的吗,再推呗。因为各样研发组之间平素不联络的题材导致上线延迟近半个月(前边研发自己联调就花了一个周,测试联调又花了两三天)。

3-3 django orm介绍与model设计

上节课程完成后代码(来学学本节前置条件):

github仓库地址:https://github.com/mtianyan/DjangoGetStarted

  • 对应commit: 留言板前端页面彰显。这一次内容停止教程3-2扫尾。

或者现在你还在通过手写sql语句来操作数据库,当大家有了orm,数据库操作变得很粗略。这一小节我们来读书Django中的orm。

此时已经是10月首了,公司也从懒散状态进入了不闲散状态(整个集团过完年就像泄了气的皮球,一副要死不活的旗帜,听说目前两年都这样,一向到五三月才缓和过来,小白这几天也像泄了气的皮球,还没缓过来吗),最先了做和好的系列。也就是时下小白正在一部分星期三夜做客服的这个东东(http://www.51nhds.com)。虽然在上一个项目上自认为已经走了很多坑,但做产品的坑却不是当时的我或者说现在的我所能真的理解的,这一年下来才真的知道自己在产品这条路上真的还只是个小白,很多坑真的得靠时间和经验来沉淀、积累。这不是一个可以一蹴而就的职业,也算是明白为什么很多人说:从现代国内的教学体系里完全不可能培养出产品经理来,相对于产品经理这样开放的职业,需要博学而多闻、需要拥有一颗“真爱之心”,是一个不断尝试、不断去创新的职业,而现在的应试教育模式是可以说完全不适合的(当然这里不是说应试教育的好与不好,我也没资格说好与不好,这里只是陈述这个事实)。

剔除数据。

对于查询到的数额做去除:

# 方法2 :filter取出指定条件值,逗号代表and 必须同时满足两个条件才返回。
all_message = UserMessage.objects.filter(name='mtianyan', address='西安')

# 我的数据库里保存着可以匹配到该条数据的一行。

# 删除操作:使用delete方法删除all_message

all_message.delete()

    for message in all_message:
        # 删除取到的message对象
        message.detele()
        # print message.name

点击run并访问:http://127.0.0.1:8000/form/
进去Navicat举办验证。

mark

可以观察我们的这条mtianyan + 武汉(Fast)的数目现已被删去。

至此:我们曾经学会了增产,删除,查询。

本节终止github对应commit:

django model的增删改数据库。本次内容结束教程3-4。

第二个品种是邀请函,这一个东西在成品里面就挑起了热烈的座谈,是和水土保持的H5如易企秀、MAKA等商家合作(用别人的接口)依旧要好独立开发,是做一个想易企秀一样的事物仍旧直接做一个SX的模板,是背景和情节不关乎或者做一个更SX的只好修改字段的模版呢?那多少个都通过两天的议论,过程中留存许多争持,个人提出的方案是大家既没必要做一个易企秀这样的大东西,也不用做一个太SX的沙盘。我们得以去易企秀、MAKA这么些平台做调研,同时分析传统邀请函的不可或缺信息,领会用户为啥需要用这些事物,然后做一些模块化的模版让用户可以自由组合,不过要给用户一个间接能用的根基模版(参考有赞微商城的做法,满足不同品类用户的要求),但最终是被PASS掉,有时候我都在想,是友善太容易妥协了吗?或许是啊!但最后这么些东西本身在腾讯旗下的“微现场”看到了,当时微现场也还没上线,当初的构想基本是不谋而合。另外在中间的地图导航要不要做在线地图的接口问题也是和研发斯了半天,我觉得很有必要,研发觉得没太大必要,且需要花好多时间,最后老拍板说不做(结果就是出去后首席执行官问我干吗没做,三脸懵逼)。这是第二次做手机端的东西,首次就是海养牧场分外了,第二次在堂哥大端经验依旧有些积累的,至少没像第一次这样出一部分很低级的题目,同时鉴于这是已是二月首了,研发资源紧,给本人的光阴
不多,因而还被研发砍掉了大多一半的情节(很伤心……)。

介绍字段参数

CharField必须指明默认最大尺寸。null=True,blank=True指明字段可以为空
defalut = " "指定默认值。

name = models.CharField(max_length=20,null=True,blank=True, verbose_name=u"用户名")

id是自动生成的,假若需要自定义主键,message/models.py中添加字段:

object_id = models.CharField(primary_key=True, verbose_name="主键")

这儿点击Tools 菜单下 Run manage.py Task输入makemigrations message

mark

知识点:Char菲尔德(Field)必须指明最大尺寸

object_id改为:

    object_id = models.CharField(primary_key=True, max_length=50 ,verbose_name="主键")

这时候点击Tools 菜单下 Run manage.py Task输入makemigrations message

You are trying to add a non-nullable field 'object_id' to usermessage without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

基于指示音信,大家需要给object_id添加默认值:

    object_id = models.CharField(primary_key=True, max_length=50,default="", verbose_name="主键")

get新知识点:object_id必须有默认值

输入2 退出:然后输入makemigrations message

mark

再输入下边发号施令生成数据表

migrate message 

可以看看上图过程中会告诉我们做了什么样变化,如剔除了默认系统生成的主键id
,变更了name。新增了俺们的object_id

前去Navicat验证右键设计表:

mark

可以看到object_id早就改为大家的新主键。

近期、随着社会的上进,科学技术的向上,整个社会的分工现身了显眼的更动。统一的社会大工作分工格局已经不复适合于前几日的社会前进,而是转而出现了社会垂直化精细分工。即作为产品人,你恐怕各地方的知识都需要了解部分,可是最后想要在这些社会立足,还是得有自己的一技之长才行。

3-5 django url templates配置

项目Github地址:https://github.com/mtianyan/DjangoGetStarted
本节初阶对应相应Github的commit:django
model的增删改数据库。这次内容截至教程3-4。

本节将介绍url的部署,以及怎么样将数据库数据填充回前台html页面。

场景:只同意用户修改mtianyan,倘诺没有就增长,假设有就装满使用户可以修改。

下一场这一等就基本上半个月,首席营业官终于从京都总集团回到了,对于我来说当时当成好消息,其在京都这么些月为我们(当时自家也勉强算是公司产品部的一员了吧!)带会来了一个顿时看起来“颇为不利”的品种。开会说得很简短(还记得当时我进去这么些工作来参与的首先个会议),需求是:遵照客户及市场实际需求做一个微信端商城,然后还包括先前时期的销售运营工作,集团从产品销售中取得销售提成(30%)。当时挺急的,项目方是香港一侧的一家海洋牧场(不造是甚呢,其实自己也不造,你就把她想成是蒙古放牛羊一样的就好,只是这里面养的是“海鲜”而已……)。项目并非自己开支,用外人第三方的都得以。当时一听,这不就是自己此前大半年干的老本可以吗?微信网站啥的自家在行啊,当时盛极一时的怎么有赞、微盟、云微客、分销客、微三云之类的东西,我闭着眼睛就精晓其中有甚(有点夸大哈……),不过的确很熟,而且公司偿还配设计师,我实际都想说不要这么劳碌啦,我一个人保守估量一个周之内给你搞定!然后就一副我能搞定的指南接下那些“项目”(也想过,尼玛这样实在可以啊?那么高的报酬,人家怎么找你吗,然后又想可能真的是钱五人傻啊!!!全然不知,坑偶多少深度……)。然则谜底很快就立了Flag,显示貌似乎真的没自己想的那么美好。

取出数据

message/views.py中的getform方法中

    message = None
    all_message = UserMessage.objects.filter(name='mtianyan', address='西安')

    # if 判断是否存在数据
    if all_message:
        # all_message是一个list,可以使用切片。
        message = all_message[0]

此地注意把前几节写的删除掉

把那些用在生活中、经济学里、甚至是大家的成品上,同样适用。产品怎么诞生,因为有需求,当然很多伪需求(其实需要远非真伪,只是看数据、看现象、以及社会变化)不在探究范围。产品人做产品最着重的是什么,不是一个按钮一行文字的利弊与否;也不在于一个功力,一个页面高低矮丑;更首要的是产品稳定。很多成品可能你只是从中直接手,而不是一伊始你就参加,但这并不争辩。你只需要精晓产品现在在咋样岗位,将来要走向怎么着终点(目的),不要用什么样世界变化太快的谎言来骗自己,变得是路,不是终点。金华是南宁,新加坡是京城,中间不论多少湖海山川、多少公路铁轨,上海依旧依然新加坡,只是不同的人走的路或者不同、用的工具不同而已。而产品也是这么,目标是可以既定的,运营的措施可以随意应变。

将数据回填至html中

此次分享到此就是了结了,作为一名产品新人,会有好多合计不周详或是表达不当的地点,欢迎我们留言评论指导或者加我微信:chengshinanhai261820,凌雪在此伺机与你共同探讨、分享、等待与君(卿)共勉**

if - else

官方提供模板如下:

mark

个人执行:

mark

满意if运行结果:

mark

不满足if:如改为my_message.name == "mtianyan1"运行结果:

mark

时光如隙,稍纵指尖。没有安静的见识,只有一定的时光;生活的每日,每一刻都在变化着。在此辞旧迎新之际揭橥一下这儿实在的抒写:毕业近两年,而我要么如此,从一无所有的结业到现行饥寒交迫的上班,只是心思多了多少惆怅罢了!这一年半以来,从最初毕业毫无方向的抱负满怀到前几日筹备不展的不用方向。

ifequal & ifnotequal

mark

官方文档解释:ifequal a b
相当于f a == b.ifnotequal则一定于if a != b

村办执行:

mark

结果为:未找到粤语昵称

2015这一年从早期毕业走出高校做美工,到逐渐转向运营,在这么些进程中曾想过去做大神(程序猿),在此以前高校闲暇之余都会去学点代码啥的,但最后自己发现自家即便长的没那么夸张,但却毫不那么安静,感觉成神的路不太符合自己,至多也就是作为一种兴趣爱好罢了。而无意通晓到这世界上还有产品主管这样一种人,看了些乔布斯(乔布斯)、张小龙之类的故事,感觉这就是一个比大神还牛比的差事,顿时以为自身认识的社会风气原来不是那么。

创办我们的models

verbose_name:对象的人类可读的名号,单数:

verbose_name = "pizza"

class Meta,内嵌于 UserMessage 这个类的定义中
如果 class Publisher 是顶格的,那么 class Meta 在它之下要缩进4个空格--按 Python 的传统
你可以在任意一个 模型 类中使用 Meta 类,来设置一些与特定模型相关的选项。
如:设置ordering = ['name'],默认地都会按 name 字段排序

message/models.py:

# 继承于django.db.models.Model
class UserMessage(models.Model):
    # 设置最大长度,verbose_name在后台显示字段会用到
    name = models.CharField(max_length=20, verbose_name=u"用户名")
    # Django提供内置的邮箱字段会帮忙验证` default_validators = [validators.validate_email]`
    email = models.EmailField(verbose_name=u"邮箱")
    address = models.CharField(max_length=100, verbose_name=u"联系地址")
    message = models.CharField(max_length=500, verbose_name=u"留言信息")


    class Meta:
        verbose_name = u"用户留言信息"
        # db_table ,这里我们让它自动生成所以不用指定

此刻我们履行makemigrations messages会意识并从未改动。

mark

因为setting中我们并未注册我们的app: message

注意:新建的app都要在setting中注册

实际仍然小康的…..

url先后顺序问题

注意url匹配规则中一定毫无遗忘/$标志代表以form/截至的才会有效。不会向后持续配合。比如没有/$

    url(r'^form', getform, name="form_new")

那时候大家进来浏览器访问时输入http://127.0.0.1:8000/formemmm都可以被响应。

mark

特别是假如底下还布置有被这么些规则包含的条规,会发出被写在更靠前的阻拦住得不到正确处理的Bug。

mark

上图大家是想要让formtest响应admin.site.urls。但是会被form提前拦截住。

于是我们终将要留心加上/$符号。

迄今我们完成了留言板项目:学习到了Django必备的基础知识。
下一章大家将上马我们的进阶学习:开发在线教育平台网站。

本章截止:

对应Commit: 留言板项目学习完成,本次内容截至教程3-5。完结,撒花。
项目Github地址:https://github.com/mtianyan/DjangoGetStarted

带着如此懵逼的动静和一颗惆怅的心,周六我来到了公司,感觉还挺不错的啊!在我们这穷乡僻壤的地点,能有这么大一个办公室场面,不错哇!占了全方位一层楼(妈蛋,面试时候来回匆匆,都没好美观两眼),心基本安了下来,然后起首了谈工资,年轻人嘛,虚心点(其实是傻),感觉自己啥都不会嘛,能要团结就不易了,像受了多大好处一样,也不敢要工资,人家问我上一家有些,也特么老实,也就属实说了,其实人家还挺好心的,给了自身一个还算而不是的工钱,年少人傻嘛!就这么干到前日。好啊,也当是为青春积累经验啊!从进入店铺来说,一个月没见到自己的上司,当然也就半个月基本没干啥事(期间写了一篇公司的制品体验报告)。期间因为也没见过面,也不造到底老董是一个如何的人,只在QQ上聊过你一一回,让自家写了个铺面2018年(2015)年付出的一款产品的体会报告。当是真是什么都不会,在某网站东翻翻,西翻翻,终于找了个模版,跟着写了个现行为主看不下去的经验报告,我臆度立时业主看了就想把我辞了…..(其实是说写得科学,可是自己或者精通自己写的如何,或许夸我只是不想让新人太大压力)。

将数据存入数据库

叩问:django/db/models/base.py 源码中提供save方法

def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):

getform方法中添加代码:

 # 存储部分

    # 首先实例化一个对象
    user_message = UserMessage()

    # 为对象增加属性
    user_message.name = "mtianyan2"
    user_message.message = "blog.mtianyan.cn"
    user_message.address = "西安"
    user_message.email = "1147727180@qq.com"
    user_message.object_id = "efgh"

    # 调用save方法进行保存
    user_message.save()
  • 打上断点:如下图。

mark

  • 直白惦念f6单步调试,直到如下图:藏蓝色到return语句

mark

可以在下方值窗口查看到值

mark

最后愿与诸位同事共同再接再厉,共同提高,越走越远。俺们心怀梦想,屌丝终将逆转!

修改return render

return render(request, 'message_form.html',{
        "my_message" : message
})   

这边前面的”my_meassage”是我们得以活动命名的。会有一个my_message目的随着重回前端页面。

辞旧迎新,曾经已远去,将来已来临;新的一年,让投机较劲去迎接吧!

template模板渲染中的一些用法。

在大家的template模板中也就是form.html中,不同意我们写Python的语法,
它提供了一套自己的内建标签。

官方文档中template内建标签用法传送门

天,遮丑得无与伦比啊……

花了这么多时间和活力该说至少问题不多了吧,测试也测了,我自己基本效率也跑了。不过尼玛上线用户拔取,各个题材接踵而来,直到前几天,也就是主导用户年会都差不多完了,才算基本完善了,这两天发奖功能再也没出问题了,中途平昔有小问题,改了这一个来卓殊,改了十分来这么些。总括:就是决不任意相信研发在产品方面的逻辑思维能力和联系能力,他们多多时候真的只是实现您的效益而已,不会去想的;至于交流就是他们挨着坐在一起或者如故需要你去推动互换,不然你会接到什么的结果你懂的!

第多少个类别颁奖功效,这是做得最坑的一个效能,不光是东西坑,我自己也坑,研发也坑,那么些东东终于把公司主题具有的研发转了三回。需要组合在此之前的另外武器的数据,统一实现为一日游及颁奖仪式发奖的机能,且要求在产品上必须达标一致性(为了统一交互,达到所谓产品的一致性我修改了两个大版本,大哭……),还不可能去动以前的器械,因为做这些事物已经是八月了,时间很紧了,不敢动其他东西。年会即将降临,公司的营业移动一度初阶,各个研发组都还有温馨的任务要做,这么些事物完全是董事长横插进来的。最后由大家架构师研讨决定直接每个组抽调一两名成员帮忙完成那几个序列。当时自我就在想以此东东估价要做砸,事实是不美好的政工接二连三如期而至。

觉得很简短是不是……

页面布局其实依然足以的…..

海域牧场微信商城

以上基本是刨坑的废话,哈哈,到这边实在您也得以笑笑,哈哈!!!

当见到这么些工作并开始摸底后,感觉一切事情似乎都是为友好量身定做的,我是金牛座啊!我也未曾书儒家的大开大合;没有程序猿完全理性的逻辑思考;我爱不释手自己看好办事,把温馨的世界掌控在自己手里;喜欢带点理性又带点感性的回味世界,想事情;懂点设计,还懂点代码;喜欢点理论还喜欢点历史学;喜欢广猎百家所长;想要把一件工作坐到极致;我也想做一个出品让天下都来用他,……。埃玛,这不就是为我量身定做的么!然后以至于我就果断踏上了这条不归路,起首了有的基本技能的就学。老人说得好:工欲善其事必先利其器!想要进入一个新的本行(从未了然的正业)肯定得先明白一些基础,和学武打拳一样得先把马步扎好。于是乎自己一端做着已部分工作,一边花了半年时间去学了有关的工具软件,当时倍感产品经营真是太牛叉了,想要开年后大干一场,而实际是否也真的如这样想象的这么尽如我意,下边接着来看过程。

打字打废了……。