• Python学习之路—2018/6/18


    Python学习之路—2018/6/18

    1.PyCharm简单Django示例

    创建django

    File>New Project>Django,创建完毕后如下图所示:

    启动Django

    在pycharm右上角的manage中点击edit configurations编辑配置参数

    在Parameters中输入runserver 127.0.0.1:8080即可

    2.静态文件配置

    • 新建一个static文件夹
    • 将js、css等前端需要用到的文件放入static文件夹
    • 配置setting.py,将static文件夹路径加入STATICFILES_DIRS中
    STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
    

    urls.py

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('login/', views.login),
        path('timer/', views.timer),
    ]
    

    view.py

    def timer(request):
        ctime = time.strftime("%Y-%m-%d %X", time.localtime())
        return render(request, "timer.html", {"time": ctime})
    	'''
    	"timer.html":渲染的html文件
    	{"time": ctime}:将ctime传入到html文件中,html文件课题通过{{time}}获取ctime
    	'''
    

    timer.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h2 id="timer">{{ time }}</h2>
    </body>
    <script src="/static/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $("#timer").click(function () {
            $(this).css("color", "red")
        })
    </script>
    </html>
    

    3.Django路由层

    简单的路由配置

    from django.urls import path,re_path
    from app01 import views
    
    urlpatterns = [
        re_path(r'^gyq/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.gyq),  # views.gyq(2018, 6, 18)  当需要传入参数时需要在其左右加一对()
    ]
    

    有名分组

    urlpatterns = [
        re_path(r'^gyq/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]+)/$', views.gyq)  # views.gyq(year="2018", month="6", day="18") 
    ]    
    

    通过(?P<name>pattern)传入位置参数,其中name是分组名称,pattern是正则匹配模式

    分发

    在app01文件夹中新建一个urls.py,将有关app01的局部路由配置写入其中,把全局的路由配置写入项目同名文件夹的ulrs.py中

    app01/urls.py

    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        re_path(r'^gyq/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.gyq),  # views.gyq(2018, 6, 18)
    ]
    

    first_pro/urls.py

    from django.urls import path, re_path, include
    from app01 import views, urls
    
    urlpatterns = [
        re_path(r'^', include(urls))
    ]
    

    反向解析

    urls.py

    urlpatterns = [
        path('login/', views.login, name="Login"),
    ]
    
    在模板中

    当return render时,首先会解析html中的代码,当遇到{{}}或者{%%}时会反向解析,接着将渲染结果反馈给浏览器

    <form action="{% url 'Login' %}" method="post">  {#寻找name="Login"url并反馈给浏览器#}
        用户名:<input type="text" name="username"><br>
        密&nbsp&nbsp&nbsp码:<input type="password" name="password"><br>
        <input type="submit">
    </form>
    
    在Python中

    主要通过reverse(name),其中name是url的命名

    urls.py

    urlpatterns = [
        re_path(r'^gyq/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.gyq, name="year-month-day")
    ]
    

    view.py

    from django.urls import reverse
    
    def gyq(request, year, month, day):
        url = reverse("year-month-day", args=(2018, 11, 25))  #  此时的参数只是正则匹配中的参数,与在浏览器输入的无关
        print(url)
        return HttpResponse(year + "-" + month + "-" + day)
    

    名称空间

    由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回。当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

    project中的urls.py

    urlpatterns = [
        re_path(r'^app01/', include(("app01.urls", "app01"))),  # 参数1:app对应的urls
        re_path(r'^app02/', include(("app02.urls", "app02"))),  # 参数2:名称空间的命名
    ]
    

    app01和app02中的urls.py

    urlpatterns = [
        re_path(r'index/', views.index, name="index"), 
    ]
    

    app01/views.py

    def index(request):
        return HttpResponse(reverse("app01:index"))
    

    app02/views.py

    def index(request):
        return HttpResponse(reverse("app02:index"))
    

    Django2.0中的path

    re_path()中匹配的正则表达式修改起来较为麻烦,所以在2.0中引入了path模块解决这个问题

    urls.py

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('gyq/<int:year>/', views.get_year),
    ]
    

    使用(<>)从url中捕获值,下面官方文档的简单示例:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('articles/2003/', views.special_case_2003),
        path('articles/<int:year>/', views.year_archive),
        path('articles/<int:year>/<int:month>/', views.month_archive),
        path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    ]
    

    Path Converters

    • str:匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    • int:匹配正整数,包含0。
    • slug:匹配字母、数字以及横杠、下划线组成的字符串。
    • uuid:匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    • path:匹配任何非空字符串,包含了路径分隔符
  • 相关阅读:
    P4995 跳跳!
    P4306 [JSOI2010]连通数
    P1339 [USACO09OCT]热浪Heat Wave
    P2002 消息扩散
    P3388 【模板】割点(割顶)
    P1656 炸铁路
    P2863 [USACO06JAN]牛的舞会The Cow Prom
    P1516 青蛙的约会
    3.从尾到头打印链表
    2.替换空格
  • 原文地址:https://www.cnblogs.com/ExBurner/p/9196686.html
Copyright © 2020-2023  润新知