Django入门问题总结

1、创建Django项目

Pycharm+虚拟环境
新建Django项目即可。
配置库:

Django2.2
Pillow7.1.1
asgiref3.2.7
django-dajax0.9.2
django-dajaxice0.7
django-tinymce3.0.1
mysqlclient 1.4.6
numpy1.18.3
pandas1.0.3
pip20.0.2
python-dateutil 2.8.1
pytz2019.3
setuptools 40.8.0
sqlparse0.3.1
xlwt1.3.0

2、创建APP

python manage.py startapp login
  • 每个Django项目中可以包含多个APP
  • 相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也可以有联系。
  • 所有的APP共享项目资源。

3、编写路由urls.py

  • 路由是浏览器输入url,在Django服务器响应url的转发中心。
  • 路由都写在urls文件里,它将浏览器输入的url映射到相应的业务处理逻辑也就是视图。
  • URL文件将输入的地址,映射到对应的views.py里面的class或者function。

4、编写视图函数

  • 视图函数处理用户请求,也就是编写业务处理逻辑。
  • 对于接收到URL之后,映射到对应的views.py中对应的类中的处理方式。
  • 在界面中输入提交,相当于post的方式提交数据,此时根据views.py中函数方法处理这些数据,处理之后返回处理后结果。

5、返回HTML文件

  • 返回HTML,只需要在views.py中的函数里面,将对应的函数返回改为HTML文件即可。
return render(request,’index.html’)

render方法使用数据字典和请求元数据,渲染一个指定的HTML模板。其多个参数中,第一个参数必须是request,第二个是模板。

在templates目录中新建一个index.html文件。
为了让django知道我们的HTML文件在哪里,需要修改settings文件的相应内容。但默认情况下,它正好适用,无需修改。

TEMPLATES = [
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]

6、 使用静态文件

我们已经可以将HTML文件返还给用户了,但是这还不够,前端三大块HTML、CSS、JavaScript,还有各种插件,它们齐全才是一个完整的页面。在Django中,一般将这些静态文件放在static目录中。

  • 在mysite中新建一个static目录。拷贝了一个jquery-3.2.1.min.js
    为了让Django知道这个static目录的存在,并能够找到这个目录,需要对settings进行配置:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

然后可以在index.html中引入js文件了

7、动态交互

在HTML中设置为post输入的方式
在views.py中的相关函数中设置if判断输入post接收数据。

8、 使用数据库

  • 使用数据库前,我们需要注册app:
    不注册它,你的数据库就不知道该给哪个app创建表。
    在setting.py的installedapp里面加入即可。
  • 然后我们在settings中,配置数据库相关的参数,如果使用sqlite3,则不需要做任何修改。
  • 再编辑models.py文件,也就是MTV中的M。
    这里我们创建了2个字段,分别保存用户的名字和密码。
    接下来要在Pycharm的Teminal中通过命令创建数据库的表了。有2条命令,分别是:
python manage.py makemigrations
python manage.py migrate
  • 现在,我们来修改views.py中的业务逻辑,在view中将数据存储到数据库中,并从数据库中读取数据。此间数据存储格式为列表里面包含字典。

建议:除了admin路由外,尽量给每个app设计自己独立的二级路由。

9、创建管理员用户

  • 首先,我们需要通过下面的命令,创建一个可以登录admin站点的用户:
python manage.py createsuperuser
  • 现在还无法看到投票应用,必须先在admin中进行注册,告诉admin站点,请将polls的模型加入站点内,接受站点的管理。

  • 数据库表单管理
    在model.py里面

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

创建列表。用于贴入数据库。

当然,创建完之后都需要更新数据库。

在admin.py里面,

admin.site.register(Question)

将数据库的内容添加到站点里面进行管理。

  • 这里有个非常重要的问题:在当前视图中的HTML页面是硬编码的。如果你想改变页面的显示内容,就必须修改这里的Python代码。为了解决这个问题,需要使用Django提供的模板系统,解耦视图和模板之间的硬连接。

  • 首先,在polls目录下创建一个新的templates目录,Django会在它里面查找模板文件。

  • 项目的 TEMPLATES配置项描述了 Django 如何载入和渲染模板。默认的设置文件设置了 DjangoTemplates 后端,并将 APP_DIRS设置成了 True。这一选项将会让 DjangoTemplates 在每个 NSTALLED_APPS 文件夹中寻找 “templates” 子目录。这就是为什么尽管我们没有像在第二部分中那样修改 DIRS 设置,Django 也能正确找到 polls 的模板位置的原因。

  • 在templates目录中,再创建一个新的子目录名叫polls,进入该子目录,创建一个新的html文件index.html。换句话说,你的模板文件应该是polls/templates/polls/index.html。因为 Django 会寻找到对应的app_directories ,所以你只需要使用polls/index.html就可以引用到这一模板了。

快捷方式:render()

  • 在实际运用中,加载模板、传递参数,返回HttpResponse对象是一整套再常用不过的操作了,为了节省力气,Django提供了一个快捷方式:render函数,一步到位!

  • render()函数的第一个位置参数是请求对象(就是view函数的第一个参数),第二个位置参数是模板。还可以有一个可选的第三参数,一个字典,包含需要传递给模板的数据。最后render函数返回一个经过字典数据渲染过的模板封装而成的HttpResponse对象。

三种方式:

return HttpResponse("You're looking at question %s." % question_id)
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
return render(request, 'login/detail.html', {'question': question})
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})

三种描述方式对比:

# def index(request):
#     latest_question_list = Question.objects.order_by('-pub_date')[:5]
#     output = ','.join([q.question_text for q in latest_question_list])
#     return HttpResponse(output)

#

# def index(request):
#     latest_question_list = Question.objects.order_by('-pub_date')[:5]
#     template = loader.get_template('login/index.html')
#     context = {
#         'latest_question_list': latest_question_list,
#     }
#     return HttpResponse(template.render(context, request))

#

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
return render(request, 'login/index.html', context)

forloop.counter
forloop.counter是DJango模板系统专门提供的一个变量,用来表示你当前循环的次数,一般用来给循环项目添加有序数标

  • 由于我们发送了一个POST请求,就必须考虑一个跨站请求伪造的安全问题,简称CSRF(具体含义请百度)。Django为你提供了一个简单的方法来避免这个困扰,那就是在form表单内添加一条{% csrf_token %}标签,标签名不可更改,固定格式,位置任意,只要是在form表单内。这个方法对form表单的提交方式方便好使,但如果是用ajax的方式提交数据,那么就不能用这个方法了。

  • 上面的detail、index和results视图的代码非常相似,有点冗余,这是一个程序猿不能忍受的。他们都具有类似的业务逻辑,实现类似的功能:通过从URL传递过来的参数去数据库查询数据,加载一个模板,利用刚才的数据渲染模板,返回这个模板。

static静态模板放在什么位置:

  • Django的STATICFILES_FINDERS设置项中包含一个查找器列表,它们知道如何从各种源中找到静态文件。 其中一个默认的查找器是AppDirectoriesFinder,它在每个INSTALLED_APPS下查找static子目录,例如我们刚创建的那个static目录。admin管理站点也为它的静态文件使用相同的目录结构。

数据库外键在admin中展现:

  • 在这个表单中,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Django在admin站点中,自动地将所有的外键关系展示为一个select框。在我们的例子中,目前只有一个question对象存在。

让站点的选项显示更多东西,默认只显示char:

  • 通常,Django只显示__str()__方法指定的内容。但是很多时候,我们可能要同时显示一些别的内容。要实现这一目的,可以使用list_display属性,它是一个由字段组成的元组,其中的每一个字段都会按顺序显示在“change list”页面上,代码如下:
# polls/admin.pyclass QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')

采用内联的方式,外键就不会再单独显示。

显示搜索框,在admin里面修改。

search_fields = ['question_text']
  1. 这会在页面的顶部增加一个搜索框。当输入搜索关键字后,Django会在question_text字段内进行搜索。只要你愿意,你可以使用任意多个搜索字段,Django在后台使用的都是SQL查询语句的LIKE语法,但是有限制的搜索字段有助于后台的数据库查询效率。

  2. 创建了模型之后,在使用它之前,你需要先在settings文件中的INSTALLED_APPS 处,注册models.py文件所在的myapp。看清楚了,是注册app,不是模型,也不是models.py。如果你以前写过模型,可能已经做过这一步工作,可跳过。

  3. 模型字段fields
    字段是模型中最重要的内容之一,也是唯一必须的部分。字段在Python中表现为一个类属性,体现了数据表中的一个列。请不要使用clean、save、delete等Django内置的模型API名字,防止命名冲突。下面是一个展示,注意字段的写法:
    views.py
    视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面。
    它对外接收用户请求,对内调度模型层和模版层,统合数据库和前端,最后根据业务逻辑,将处理好的数据,与前端结合,返回给用户。视图层是真正的后端,是Python工程师的‘主营业务’。
    Django的视图层包含下面一些主要内容:

  4. URL路由 视图函数 快捷方式 装饰器 请求与响应 类视图 文件上传 CSV/PDF生成 内置中间件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值