需要配置的课程机构页面url比较多,可以在app目录下创建urls,把需要配置的url写在里面,根目录urls里只写一行,把app的url给include进来。在organnization文件夹里创建urls.py,
from django.conf.urls import url, include
from .views import OrgView
urlpatterns = [
#课程机构列表页
url(r'^list/$', OrgView.as_view(), name="org_list"),
url(r'^add_ask/$', OrgView.as_view(), name="org_list"),
]
再在根目录urls.py里
from django.conf.urls import url, include
。。。。。。。。
url(r'^org/', include('organization.urls',namespace="org")),
这里在根目录下的url函数里输入了namespace="org",即命名空间,app的url函数都在这个空间里了。对应的url是:http://127.0.0.1:8000/org/list/
http://127.0.0.1:8000/org/add_ask/凡是监测到http://127.0.0.1:8000/org/的请求就都交给app的urls.py处理。然后配置页面上边的超链接,用户点击“授课机构”就显示http://127.0.0.1:8000/org/list/
base.py
<li class="active" ><a href="{% url 'org:org_list' %}">授课机构</a></li>
{% url '命名空间:url函数名' %}这个形式
原来用户填表的功能需要在app目录下创建一个form.py,建立一个类继承forms.Form,然后在响应函数里实例化该form,传入request.POST。但是由于这次的form字段和model的UserAsk表基本完全一样,可以不重新创建个form把字段再写一遍了。在organization文件夹里创建forms.py
from django import forms
from operation.models import UserAsk
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
fields = ['name','mobile','course_name']
继承forms.ModelForm类,class Meta下的代码意思是继承UserAsk的model,但只要['name','mobile','course_name']这3个字段。
在views.py里
from django.http import HttpResponse
from .forms import UserAskForm
class AddUserAskView(View):
"""
用户咨询
"""
def post(self,request):
userask_form = UserAskForm(request.POST)
if userask_form.is_valid():
user_ask = userask_form.save(commit=True)
return HttpResponse('{"status":"success"}',content_type='application/json')
else:
return HttpResponse('{"status":"fail","msg":"添加出错"}',content_type='application/json')
不需要实例化form,把request.POST的值保存到form的每个字段再save()。只需要user_ask = userask_form.save(commit=True)
commit=True的意思就是保存到数据库。
前端点击提交后不应该刷新页面,只是json的变化。需要懂json和ajax
{% block custom_js %}
<script>
$(function(){
$('#jsStayBtn').on('click', function(){
$.ajax({
cache: false,
type: "POST",
url:"{% url "org:add_ask" %}",
data:$('#jsStayForm').serialize(),
async: true,
success: function(data) {
if(data.status == 'success'){
$('#jsStayForm')[0].reset();
alert("提交成功")
}else if(data.status == 'fail'){
$('#jsCompanyTips').html(data.msg)
}
},
});
});
})
</script>
{% endblock %}
这样在前端输入数据提交后就保存到数据库的表里了。