Python django中url.py中的每个url都应该有它吗';谁有自己的方法来响应请求?
我的测试站点有几个搜索页面,每个页面都包含自己的搜索表单。 但是其中一些页面非常相同,并且它们在视图.py中的显示功能非常相似 例如:Python django中url.py中的每个url都应该有它吗';谁有自己的方法来响应请求?,python,django,Python,Django,我的测试站点有几个搜索页面,每个页面都包含自己的搜索表单。 但是其中一些页面非常相同,并且它们在视图.py中的显示功能非常相似 例如: @csrf_exempt def rooms(request): submited = False search_option = 'None' search_param = 'None' data = [] query = '' try: cnx = mysql.connector.connec
@csrf_exempt
def rooms(request):
submited = False
search_option = 'None'
search_param = 'None'
data = []
query = ''
try:
cnx = mysql.connector.connect(user='root', password='****', host='127.0.0.1', database='lessons')
cursor = cnx.cursor()
if not submited:
query = "SELECT * FROM Rooms;"
cursor.execute(query)
data = cursor.fetchall()
if request.method == 'POST':
submited = True
if request.POST['search_option'] != "" and request.POST['search_param'] != "":
search_option = request.POST['search_option']
search_param = request.POST['search_param']
query = "SELECT * FROM Rooms WHERE " + search_option + " = " + search_param + ';'
cursor.execute(query)
data = cursor.fetchall()
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
return render(request, "rooms.html",
{"page_name": "Rooms", "search_option": search_option, "search_param": search_param,
"submited": submited, "dbdata": data, "query": query})
@csrf_exempt
def teachers(request):
submited = False
search_option = 'None'
search_param = 'None'
data = []
try:
cnx = mysql.connector.connect(user='root', password='****', host='127.0.0.1', database='lessons')
cursor = cnx.cursor()
if submited == False:
query = "SELECT * FROM Teachers;"
cursor.execute(query)
data = cursor.fetchall()
if request.method == 'POST':
submited = True
if 'search_option' in request.POST and 'search_param' in request.POST:
search_option = request.POST['search_option']
search_param = request.POST['search_param']
query = "SELECT * FROM Teachers WHERE " + search_option + " = '" + search_param + "';"
cursor.execute(query)
data = cursor.fetchall()
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
return render(request, "teachers.html",
{"page_name": "Teachers", "search_option": search_option, "search_param": search_param,
"submited": submited, "dbdata": data, "query": query})
我想知道我怎么能让几个类似的搜索URL(有一些非常小的更改,在我的例子中,显示一般结果的是不同的初始SQL查询)引用一个函数(可能是由于一些if语句决定显示哪个页面),而不是几个完全相同的URL,并避免代码重复
url.py
urlpatterns = patterns('',
url(r'rooms', 'lessons.views.rooms', name='rooms'),
url(r'teachers', 'lessons.views.teachers', name='teachers'),
url(r'subjects', 'lessons.views.subjects', name='subjects'))
提前感谢。请求路由器配置(您可以称之为
url.py
)正是为了将请求映射和查看代码分开。您还可以将其用于视图重用
如果您查看django自己的一些示例,您会发现:
(r'^about/', TemplateView.as_view(template_name="about.html"))
这或多或少正是您的建议:对不同类型的URL重复使用相同的视图代码。您也可以在普通视图中模拟它:
def my_view(request, param=None):
[...]
from functools import partial
url(r'^my_view0/', partial(views.my_view, param=0)),
url(r'^my_view1/', partial(views.my_view, param=1))
您可以从每个url使用相同的视图功能,比如说
lessons.views.generic\u view
,您可以根据视图的名称进行区分,如下所示:
from django.core.urlresolvers import resolve
def generic_view(request):
view_name = resolve(request.path).view_name
if view_name == 'teachers':
...
您的示例url.py
:
urlpatterns = patterns('',
url(r'rooms', 'lessons.views.generic_view', name='rooms'),
url(r'teachers', 'lessons.views.generic_view', name='teachers'),
url(r'subjects', 'lessons.views.generic_view', name='subjects')
)
为什么要使用原始SQL而不是模型和ORM调用?@DanielRoseman,这只是我们老师的任务。下一步的工作将涉及ORM。我想这个实验室应该向我们展示使用ORM的优势。我想这违反了PEP-20,第二行。有一个更明确的途径可以做到这一点。