[关闭]
@llplmlyd 2019-04-18T09:06:58.000000Z 字数 1883 阅读 832

Django构建交互视图

Python


构建交互视图

Templates HTML

在templates目录中,再创建一个新的子目录名叫polls,进入该子目录,创建一个新的html文件index.html

静态文件目录static js css html 插件等

在根目录的文件夹下建立一个静态文件目录xxx
然后在setting中启用该静态文件目录
jQuery :https://code.jquery.com/

跨站点请求保护机制

在form表单里面添加 {% csrf_token %} 这一段

POST 接收用户的数据 并返回

View中def 页面 用post的method可以接收用户输入
根据用户的数据,进行处理后再返回给用户。改造views.py,再改造index.HTML文件
View:创建空列表(用于返回html中可以迭代输出)、def index(request)、request.POST.get(‘xxxx’)、render(request、html文件、xxx)

form标签的action属性和method属性

action 表示你要发送的目的url
method表示提交数据的方式,一般分POST和GET

render

render使用数据字典和请求元数据,渲染一个指定的HTML模板。其中有多个参数,第一个参数必须是request,第二个参数是模板,第三个是传入模板的上下文参数

HttpResponse

view中的def的页面不能直接返回字符串,得用 HttpResponse 封装,才会被HTTP协议识别
如:return HttpResponse("Hello World",%xxx)
这里没有添加html文件,结果直接显示的浏览器的页面上。

  1. user_list = []
  2. def index(request):
  3. if request.method == 'POST':
  4. username = request.POST.get('username')
  5. password = request.POST.get('password')
  6. print(username, password)
  7. temp = {'user': username, 'pwd': password}
  8. user_list.append(temp)
  9. return render(request, 'index.html', {'data': user_list})

Setting:TEMPLATES(HTML文件夹的定位)、STATIC(静态文件的定位:css、js、各种插件)
HTML:form、 action、method、input、submit type

get_object_or_404

将一个Django模型作为第一个位置参数,后面可以跟上任意个数的关键字参数,如果对象不存在则弹出Http404错误。

HTML中超链接中硬编码的修改

  1. 原编码:
  2. <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
  3. # /polls/ 部分为硬编码
  4. 修改后:
  5. <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

修改之后如果变更url只需要在urls.py中进行修改即可,如:

  1. url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
  2. #在?P前进行添加 即可

保存数据,存入数据库

在model中创建需要保存的用户数据的class(表) 通过orm进行数据字典的定义。同时model中也可以在class中进行def定义。
在view中修改将原本保存到临时列表中的数据通过对象创建语言objects.create()添加到数据库
然后通过数据库的API调用,将其结果返回到user_list中,同样是列表形式
最后用 render 返回给用户
HTML中可保持不变

URL names 命名空间

在app/urls.py 文件的开头部分,添加一个app_name,添加后url的调用需要进行响应的修改 才算引用

  1. 原:
  2. <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
  3. 修改后:
  4. <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

套路总结:路由url、视图view、模板model、模型html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注