Python Django framework completes a complete Forum (2. urls. py configuration, static file), django2.urls. py
Final effect: http://www.cnblogs.com/xuyiqing/p/8274912.html
Urls. py Configuration:
"""BlogTest URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.0/topics/http/urls/Examples:Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home')Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import urlfrom web import viewsurlpatterns = [ path('admin/', admin.site.urls), path('', views.index), url(r'^login/$', views.login), url(r'^logout/$', views.logout), url(r'^check_code/$', views.check_code), url(r'^register/$', views.register), url(r'^reply/(?P<username>\w+)/(?P<nid>\d+)$', views.reply), url(r'^write/(?P<author_name>\w+).html$', views.write), url(r'^delete/(?P<article_id>\d+)/$', views.delete), url(r'^edit/(?P<author_name>\w+)/(?P<article_id>\d+).html', views.edit), url(r'^all/(?P<article_type_id>\d+).html$', views.index, name='index'), url(r'^(?P<article_type_id>\w+)/(?P<author_name>\w+)/(?P<nid>\d+).html$', views.detail), url(r'^delete_comment/$', views.delete_comment), url(r'^good/(?P<article_id>\d+)/(?P<user_id>\d+)$', views.good), url(r'^user_info/(?P<username>\w+)$', views.user_info), url(r'^upload-avatar/(?P<nid>\d+)$', views.upload_avatar), url(r'^article_manage/(?P<username>\w+)', views.article_manage, name='article'), url(r'^comment-reply/(?P<article_id>\d+)/(?P<comment_id>\d+)/(?P<user_nid>\w+)$', views.comment_reply),]
The static file content is as follows:
Static file directory:
Jquery1.12, bootstrap, and font-awesome can be downloaded from the Internet. Other source codes are provided:
Account.css:
.login { width: 400px; margin-top: 50px; margin-left: auto; margin-right: auto; border: 1px solid #f0f0f0; padding: 10px 30px 50px 30px; -webkit-box-shadow: 5px 10px 10px rgba(0, 0, 0, .05); box-shadow: 5px 10px 10px rgba(0, 0, 0, .05);}.register { width: 400px; margin-top: 20px; margin-left: auto; margin-right: auto; border: 1px solid #f0f0f0; padding: 10px 30px 50px 30px; -webkit-box-shadow: 5px 10px 10px rgba(0, 0, 0, .05); box-shadow: 5px 10px 10px rgba(0, 0, 0, .05);}.alert{ padding: 6px; margin-bottom: 0;}
Backend.css:
.pg-header { min-width: 1190px; height: 48px; background-color: #2F72AB; line-height: 48px; overflow: visible; font-size: 12px;}.pg-header a{ color: #ffffff; text-decoration: none;}.pg-header .logo { width: 200px; overflow: hidden; height: 48px;}.pg-header .logo img { width: 200px; height: 40px; margin-top: 4px;}.pg-header .left-menu{ font-size: 13px;}.pg-header .left-menu .menu-item{ display: inline-block; padding: 0 15px; cursor: pointer; position: relative;}.pg-header .left-menu .menu-item:hover { background-color: #337ab7;}.pg-header .left-menu .menu-item .more-info { display: none; position: absolute; top: 48px; left: 0; border: 1px solid rgba(0, 0, 0, .15); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175); background-color: #fff; color: #333;}.pg-header .left-menu .menu-item:hover .more-info { display: block;}.pg-header .left-menu .menu-item .more-info .more-item { display: block; min-width: 120px; padding: 0 15px; line-height: 35px; text-decoration: none; color: #000000;}.pg-header .left-menu .menu-item .more-info .more-item:hover{ background-color: #f1f0f0;}.pg-header .right-menu .user-menu { padding: 0 8px; cursor: pointer; color: #ffffff;}.pg-header .right-menu .user-menu .bg-success{ background-color: #5cb85c !important; color: #ffffff;}.pg-header .right-menu .user-menu .bg-danger{ background-color: #d9534f !important; color: #ffffff;}.pg-header .right-menu .user-menu:hover { background-color: #337ab7;}.pg-header .right-menu .user-info { padding: 0 30px 0 10px; height: 48px; position: relative;}.pg-header .right-menu .user-info:hover .avatar { background-color: #337ab7;}.pg-header .right-menu .user-info .avatar { display: inline-block; padding: 0 10px; height: 48px;}.pg-header .right-menu .user-info .more-info { display: none; position: absolute; top: 48px; right: 20px; border: 1px solid rgba(0, 0, 0, .15); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175); background-color: #fff; color: #333; z-index: 100;}.pg-header .right-menu .user-info:hover .more-info { display: block;}.pg-header .right-menu .user-info .more-info .more-item { display: block; min-width: 160px; padding: 0 15px; line-height: 35px; text-decoration: none; color: #000000;}.pg-header .right-menu .user-info .more-info .more-item:hover{ background-color: #f1f0f0;}.pg-body{ position: absolute; z-index: 90; top:50px; bottom: 0; right: 0; left: 0; min-width: 1190px;}.pg-body .menu{ position: absolute; top: 0; bottom: 0; left: 0; width: 200px; border: 1px solid #dddddd;}.pg-body .menu .menu-item{ display: block; padding: 8px 8px; border-bottom: 1px dashed #dddddd; text-decoration: none;}.pg-body .content{ position: absolute; top: 0; bottom: 0; right: 0; left: 205px; border: 1px solid #dddddd; overflow: scroll;}
Commons.css:
img { border: 0;}.left { float: left;}.right { float: right;}
Edmure.css:
.navbar { border-radius: 0; margin-bottom: 0;}@media (min-width: 768px) { .container { width: 750px; }}@media (min-width: 992px) { .container { width: 970px; }}@media (min-width: 1200px) { .container { width: 1170px; }}.hot-recommend, .hot-comment { border-radius: 0; border: 0; margin-top: 20px;}.hot-recommend .panel-heading, .hot-comment .panel-heading { border-radius: 0;}.hot-recommend .panel-body, .hot-comment .panel-body { padding: 5px 10px;}.hot-recommend li, .hot-comment li { padding: 2px 0;}.navbar-right li a{ padding-left: 5px; padding-right: 5px;}
Home.css:
.pg-header{ height: 80px; background-color: #89b1c6; position: relative; color: #ffffff;}.pg-header .title{ font-size: 30px; line-height: 60px; margin-left: 20px;}.pg-header .menu-list{ position: absolute; bottom: 0; right: 20px;}.pg-header .menu-list a{ color: #ffffff; display: inline-block; padding: 3px 5px; margin: 0 5px; background-color: #006699;}.pg-body{ min-width: 980px; position: relative;}.pg-body .body-menu{ position: absolute; left: 0; width: 280px;}.pg-body .body-content{ position: absolute; right: 0; left: 280px; overflow: scroll;}.pg-body .body-content .art-title{ font-size: 24px; font-weight: bold; border-bottom: 1px solid #dddddd; padding: 5px;}.pg-body .body-content .art-content{ font-size: 12px;}.pg-body .body-content .art-comment .comment-list { padding: 5px;}.pg-body .body-content .art-comment .comment-list .comment-item{ border-bottom: 1px solid #dddddd;}.pg-body .body-content .art-comment .comment-list .reply-title{ margin: 5px 0;}.pg-body .body-content .art-comment .comment-list .reply-title .user-info{ float: left;}.pg-body .body-content .art-comment .comment-list .reply-title .reply{ float: right;}.pg-body .body-content .summary-list{}.pg-body .body-content .summary-list .summary-item{ border-bottom: 1px solid #dddddd;padding: 8px 0;}.pg-body .body-content .title-list .row-item{ border-bottom: 1px solid #dddddd;padding: 8px 0;}
Row-avatar.css:
.article-item{ font-size: 13px; border-bottom: 1px dashed #dddddd; padding: 5px 0;}.article-item h3{ margin-top: 10px; font-size: 20px;}.article-item .avatar{ border: 1px solid #d5d5d5;margin-right: 5px;}.article-item .avatar img{ width: 70px;height: 70px;padding: 1px;}.article-item .footers{ padding: 5px 0 0 0;}.article-item .footers .ele{ margin: 0 10px;}
Accordion. js:
(Function ($) {/* up/down fixed menu: Initialize the left menu position */function initFixedAccordion () {var currentIndex = $ ('. fixed-accordion. accordion-item.active '). index (); currentIndex =-1? 0: currentIndex; changeFixedAccordion (currentIndex);}/* top and bottom fixed menu: changed left menu */function changeFixedAccordion (currentIndex) {var $ accordionItem = $ ('. fixed-accordion. accordion-item '); var itemLength = $ accordionItem. length; var accordionHeight = $ ('. fixed-accordion '). outerHeight (); var headerHeight = $ accordionItem. find ('. accordion-header '). outerHeight (); var contentHeight = accordionHeight-3-headerHeight * itemLength; $ accordionItem. each (function (k, v) {$ (this ). removeAttr ('style'); if (currentIndex> k) {response (this).css ('top', k * headerHeight); $ (this ). removeClass ('active');} else if (currentIndex = k) {$ (this ). addClass ('active'); values (this).css ('top', k * headerHeight); values ('height', contentHeight);} else {var index = itemLength-k-1; $ (this ). removeClass ('active'); Certificate (this).css ('bottom ', index * headerHeight) ;});}/* upper and lower fixed menu: bind Click Event */function bindFixedAccordionEvent () {$ ('. fixed-accordion. accordion-header '). on ('click', function () {var itemIndex = $ (this ). parent (). index (); changeFixedAccordion (itemIndex);})}/* normal menu: bind a click event to the menu */function bindEasyAccordionEvent () {$ ('. easy-accordion. accordion-header '). on ('click', function () {$ (this ). parent (). addClass ('active'); $ (this ). parent (). siblings (). removeClass ('active') ;};}$. extend ({easyAccordion: function () {activities () ;}, fixedAccordion: function () {initFixedAccordion (); bindFixedAccordionEvent () ;}})}) (jQuery );
Timg. py is a webpage background image
The imgs folder contains the user avatar and the default user avatar.