Python学习第107天(Django的url控制和conf设置)
一、关于如何通过url来实现登录界面的数据提交和获取
先看一下html部分的文件内容:
<form action="/register" method="post"> <p>姓名<input type="text" name="user"></p> <p>年龄<input type="text" name="age"></p> <p>爱好<input type="checkbox" name="hobby" value="1">篮球 <input type="checkbox" name="hobby" value="2">足球 <input type="checkbox" name="hobby" value="3">乒乓球 </p> <p><input type="submit">提交</p> </form>
而在django_test下的url.py文件中,对应的url描述为
url(r"register",views.register),
views.register中的文件内容
def register(request): if request.method=="POST": print(request.POST.get("user")) print(request.POST.get("age")) return HttpResponse("success!") return render(request,"register.html")
这里应该注意的内容有以下几点:
1.当我们启动127.0.0.1/register,此时我们是直接进入了登录界面,即需要我们输入信息的部分
2.在def register中我们增加了判断通过request.method == ‘POST’这个语句实现判断是首次登录还是提交数据,因为一旦提交数据则会有出现提交方式的相关信息,此时通过判断,我们就可以了解到目前是属于首次登录还是进行提交;
3.action="/register"无需完整写出,因为会默认增加127.0.0.1这部分内容
下面说到增加假名的效果:
需求:
例如register在使用的过程中,可能会在多个界面进行使用这一登录界面,如果我们更换了/register所在的路径,就需要逐一对所有使用这一路径的action变量进行更改,这样就非常的不方便,所以此时我们就在url处设置一个假名,在html中的action中调用时使用假名,即使此时的路劲发生了变化也能通过假名查找到原来的路径
操作如下:
url(r"register",views.register,name="reg"),
接着是action处:
<form action="{% url 'reg' %}" method="post">
这里特别注意假名reg要用引号括起来
二、url的分组方式,这里需要之前的正则部分内容知识
url(r'article/(\d{4})$',views.article_year), url(r'article/(?P<year>\d{4})/(?P<month>\d{2})',views.article_year_month),
上面是不进行命名的后面的是命名的
这里需要注意的是,一旦命名,后面视图部分的内容就需要与前面的命名完全保持一致
当然,此时匿名的在后面的视图方法中命名就可以随意了
def article_year(request,y): return HttpResponse(y) def article_year_month(request,year,month): return HttpResponse("year:%s month:%s"%(year,month))
三、关于引入jQuery的方法
首先,Django的render是只能识别html文件的,所以我们像之前那样导入jQuery的方式是没办法实现的
此时我们需要把jQuery文件放在我们创建的static文件中,而关于static文件的名称引入方式
1.存放位置确定后,路径的导入是在django_lesson下的settings中进行设定
STATIC_URL = '/static/' #引用名
STATICFILES_DIRS = (os.path.join(BASE_DIR,"statics") #实际名 ,即实际文件夹的名字
此时我们在引入的过程中需要和引用名保持一致
<script src="/static/jquery-3.1.1.js"></script>
<script src="{% static 'jquery-3.1.1.js' %}"></script>
以上为两种导入方式,推荐使用第二种方式,比较灵活,不会写死
四、url的conf分类
需求:京东、淘宝这种网站子链接特别多,如果全部放在urlpatterns之下,会造成很乱,条例不清晰的情况,所以我们在每个单独的app之下创建conf文件,在通过django_lesson下的urlpatterns内容吧关于某一app的所有连接全部导入到对应app下的conf文件中
from django.conf.urls import url,include from django.contrib import admin from blog import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^show_time/', views.show_time), url(r'^blog/', include('blog.urls')), 导入到了blog下面的urls文件中 ]
下面是app即blog下的urls.py文件中的内容
from django.conf.urls import url,include from django.contrib import admin from blog import views urlpatterns = [ url(r'article/(\d{4})$',views.article_year), url(r'article/(?P<year>\d{4})/(?P<month>\d{2})',views.article_year_month), url(r'article/(?P<year>\d{4})/(?P<month>\d{2})/\d+',views.article_year_month), url(r"register",views.register,name="reg"), ]
此时需要注意的是,原本可以直接访问的链接,需要在中间增加blog/才能正确导入其中
明天实现以下登录用户名和用户密码的获取
同时急需复习一下正则表达式的内容,在url设计中会增加搜索功能。