django学习的一些经验

在一个文件夹下创建一个django项目,使用下面这个命令

django-admin startproject mysite

 

然后进入mysite文件夹下,启动server,

 python manage.py runserver

 

在manage.py 的同一个目录下面,我们创建一个新的polls文件夹

python manage.py startapp polls

 

 

在polls中创建一个urls.py 然后写上这些代码

from django.urls import path
from . import views

urlpatterns=[
    path('',views.index,name='index'),
    

]

 

然后再在mysite/urls中包含下面这段文字

urlpatterns = [
    path('polls/',include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

from . import views

表示的是从当前文件夹下将这个视图文件给导入进来

 

这个目的是让管理文件找到上面的那个视图

 

我们在views中写上表示界面的代码,然后再在对应的url文件中写上这个视图的地址

例如下面

 

from django.http import HttpResponse

def index(request):

    return HttpResponse("Hello, world. You're at the polls index.")

 

在根url文件中指定我们使用的polls.url模块,例如下面这样

 

from django.contrib import admin

from django.urls import include, path

 

urlpatterns = [

    path('polls/', include('polls.urls')), 找到对应的视图文件

    path('admin/', admin.site.urls),

]

 

'polls.apps.PollsConfig',

需要在seeting文件中,install_app中配置上这一项,方便找到文件

 

解决出现模版中的html文件找不到的事情

首先在主控文件中找到setting文件,然后在

加上DIRS中的那句话,不然他找不到路径

然后找到模版文件夹

然后点击,Mark as template file 这样他就可以找到这个模版文件

 

 

 

创建一个管理,然后可以在里面修改一些东西

python manage.py createsuperuser

 

Username:admin

 

Email address:1242388760@qq.com

 

然后输入密码

 

然后启动服务器,就可以得到管理界面

 

然后我们需要让管理界面知道,有一个对象需要被管理,于是在polls/admin.py 中添加几句话

 

from .models import Question

admin.site.register(Question)

 

 

 

需要注意的是,在views那个函数中是按照顺序进行启动的,如果把第一个index给改掉的话,就会导致出现错误。

 

视图都是采用模版的方式进行构造的

 

在polls中创建一个template/polls/文件夹,然后再创建一个index.html

就是创建一个和自身名字相同的应用文件

def index(request):

    latest_question_list = Question.objects.order_by('-pub_date')[:5]

    template = loader.get_template('polls/index.html')

    context = {

        'latest_question_list': latest_question_list,

    }

return HttpResponse(template.render(context, request))

上式表明,载入一个模版文件,同时向他传递一个上下文,这个上下文是一个字典,他将模版中的对象映射为Python对象

 

render()函数,是一个很快的函数,载入模版,然后进行填充,然后返回HttpResponse对象

是一种基本的做法

而django采用的render函数,可以快速的

 

 

在app中一般没有settings文件,只是在哪个主要的project中,才有setting文件

已经安装的app,一定要在install_app之中注册一下,并且还需要在url中进行登记

 

完成注册之后,我们需要定义模版,就是在那个templates文件中

 

在view中的函数,第一个是request,然后第二个以及后面的参数都是可选的参数,来源其实就是url中的<int:num> <str:name> <double:dd> 这些参数而已。

 

在模版中一定要将地址写清楚,假如是在polls中的模版。第二个参数一定要写polls/xxxx

不然会找不到这个文件

 

model文件中其实是为了数据库而存在的,admin文件是可以在后台进行登陆管理,然后可以对数据库进行操作

 

 

 

当我们定义好一个model中的class后,我们需要执行这条命令,使数据得到同步

python manage.py makemigrations

然后就会发现这个指令被执行后,创建了一个新的表格

一定要执行这个命令,不然就会导致数据库设置的不一致

每一次对数据类的修改,以及对数据类的新建,都可以在migration文件中找到

 

如果继续进行下面的操作,可以真正的在数据库中创建这个表

python manage.py migrate

运行的其实就是那个生成的migrations.py 文件

 

 

 

在数据库中,我们首先插入一些数据,然后我们使用

python manage.py shell 打开django自己带的shell

 

from polls.model import user 导入当前这个包,

使用命令User.objects.all()(这个是无条件的查询)

将所有的对象给查询出来

 

 

如果是使用有条件的查询

使用这条命令进行,根据括号里的字段进行查找,例如下面的命令

User.objects.filter(name=’Tony’)括号里面的不一定要求是primary_key

User.objects.get(name=’tony’)

 

上面就是查询常用的三条指令

 

 

下面介绍插入的指令

 

User.objects.create(name=’ding’,password=1234)

 

还可以调用这个方法

user=User(name=’ddd’,password=’22222’)

user.save()

 

如果是修改数据,原则上是先进行查找,然后在进行修改,最后是进行一次save操作

user=User.objects.get(name=’ding’)

user.password=’123334’

user.save()

即可

 

同样的道理,我们也可以删除一个对象,

首先找到这个对象,然后在delete这个对象

user=User.objects.get(name=’ding’)

User.objects.delete(user)

 

在表单进行数据验证的时候,例如进行用户登录的时候,首先利用登录界面传过来的email_account

然后利用 u=user.objects.filter(email_account=email_account)

获得了一个query_set,

u.exists() 返回结果是不是一个true或者是false 凭借这个就可以判断这个query_set是不是一个空的。

也可以使用count=user.objects.count(email_account=email_account) 然后返回这个查询的数量值。

 

这时可以利用u=user.objects.get(email_account=email_account) 这个函数,查找出需要的值,然后通过dot访问符进行访问即可。

 

 

在django中会用到验证用户是不是已经登录的问题,在登录的时候,我们提前申明一个全局变量,user_name 然后在login中

global user_name

user_name=form.cleaned_data[‘user_name’]即可

在个人中心中使用的时候,直接表明自己应用这个值,

global user_name

然后就可以进行使用了。

 

 

在django中出现了下面的错误

django.db.utils.OperationalError: table "book" already exists

可以将对应的sqlit文件给删除掉,然后重新执行那两条命令,

或者是将migration文件夹中的升级文件给删除掉,然后再执行那两条命令即可。

注意自己数据库的键值

在django中模版的语法,  {%   %}这个是和逻辑相关的,{ {  } }这个是和变量输出相关的


{% for preson in person_list %}
    <p>{{ person }}</p>
{% endfor %}

这里指的就是将person_list中的person给拿出来,然后再将其按段显示出来

 

 

 

使用查询条件进行数据库的查询,需要使用django自带的Q函数

from django.db.models import Q

 

User.objects.filter(Q(age=10)&Q(password=’123’))

 

 

如果查询所有的名字为ding的人

User.objects.filter(name__contains=’ding’) 一定要注意是两个下滑线

 

 

如果需要查询多个数据条件

User.objects.filter(password__in[‘123’,’111’])

如果需要查询密码大于一个值

User.objects.filter(password__gt=1)

 

如果是查询大于等于的值,使用下面的查询语句

User.objects.filter(password__gte=1)

 

查询一个项小于或者是不小于,差不多和上面的语句一样

 

User.objects.filter(password__lt=1)

 

User.objects.filter(name__startswith=d)

 

同时如果是查找以什么单词结尾的人,也可以使用下面的语句

User.objects.filter(name__endswith=’g’)

 

如果是要找一个范围内的东西

User.objects.filter(birthday__range(‘1997-04-21’,’2019-11-3’))

一般来说,出现了这个错误,应该是

后面少了一个逗号。

对form.py的解析

django用来生成form表单代码和验证表单数据是不是合法的一个文件,可以在这里面自定义form表单类,一般来说,在form.py  中可以定义一些字段,用来判断前端传回来的字段是不是合理,同时生成form表单代码。

form 表单中成员也可以和html中的input元素建立一个映射关系,对于ModelForm来说,可以直接建立model字段和html form中的input元素来建立映射

form成员本身也是类,他们负责管理form中的数据,当form提交时,也可以进行数据验证,DateField其实就是一个验证管理日期的类,form类的方法,

form.is_valid():

### 其实就是验证上面的表单类是不是所有的都是正确的,当所有的都返回true时,才执行下面的语句。

 

 

django中运行流程分析

用户通过浏览器请求一个页面

URLConfig通过urls.py文件和请求的url找到对应的View

调用view中的参数

在view中可以通过models访问底层的数据

所有的Models-to-DB的交互都是通过manager来完成的

如果需要,views可以使用一个特殊的context

context被传给template用来生成页面

template使用filter和tag去渲染输出

输出被返回到view中

然后将response 返回到浏览器上,呈现给用户

 

 

 

 

 

 

 

 

阶段性的总结:

 

POST和GET方法是唯二可以处理表单的Http方法,POST方法是将表单中的数据进行打包,编码,然后发送给server,最后获取响应的方法,而GET方法是将要请求的东西直接转为字符串,然后在url中给发送回来。

 

 

 

在form表单中验证的时候,如果一直遇到返回false的情况,可能是html中的name和提交的表单的name不一致导致的,也有可能是你填的有问题

这条一定要注意,有好几回就是这样导致的问题。

 

 

Form 表单验证的时候,如果表单文件中有file的话,我们就需要

form = goods_form(request.POST, request.FILES)

并且一定要加上这句话

enctype="multipart/form-data"

如果不加这句话,会一直报错,表单验证不通过

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值