第一節:整體介紹

  Python版本3.5.2,Django版本1.10

  創建一個Django工程,并且生成一個名字為mainsite的app

django-admin.py startproject myblog
python3 manage.py startapp mainsite

  文件結構如下:

x-power@xpower-CW65S:~/chen/myblog$ tree ./
./
├── mainsite
│?? ├── admin.py
│?? ├── __init__.py
│?? ├── migrations
│?? │?? └── __init__.py
│?? ├── models.py
│?? ├── tests.py
│?? └── views.py
├── manage.py
└── myblog├── __init__.py├── __pycache__│?? ├── __init__.cpython-35.pyc│?? └── settings.cpython-35.pyc├── settings.py├── urls.py└── wsgi.py4 directories, 13 files

  介紹一下比較重要的幾個文件的用途:

    manage.py?? ?:?? ?Django用于管理網站配置的文件,是一個接受命令行指令的工具集程序。

    setting.py?? ?? :?? ?就像他的名字一樣是用于對網站的配置進行設置的。(有些地方可能我的理解也不正確歡迎指正,批評!)

    urls.py?? ??? ??? :?? ?用來設置每一個URL 的網址要對應的函數以及對應的方式,通常是創建一個新的網頁的時候首要編輯的文件。

    wsgi.py?? ??? ?? :?? ?是用于部署網站時候用的和主機中網頁服務器的溝通接口(如Apache)。

  真正的網站運行邏輯都在我們創建的App里面(這里是mainsite),這個App也體現了Django的Reuse的概念。

  我們已經創建了App但是Dajngo還是不知道有這個App的,我們在setting.py中加入這個App。

INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','mainsite',
)

  然后修改最后的時區設置,默認時區是Django的誕生地,我們先讓他倒時差,學習中文。

LANGUAGE_CODE = 'zh-CN'TIME_ZONE = 'Asia/Shanghai'

  Django自帶了一個數據庫Sql.lite。是一個超小型數據庫,一般情況下都會用其他數據庫的。現在我們先用這個數據庫。

  執行以下文件會看到生成了一個db.sqllite3的文件。

 1 x-power@xpower-CW65S:~/chen/myblog$ python3 manage.py migrate
 2 Operations to perform:
 3   Synchronize unmigrated apps: messages, staticfiles
 4   Apply all migrations: admin, auth, sessions, contenttypes
 5 Synchronizing apps without migrations:
 6   Creating tables...
 7     Running deferred SQL...
 8   Installing custom SQL...
 9 Running migrations:
10   Rendering model states... DONE
11   Applying contenttypes.0001_initial... OK
12   Applying auth.0001_initial... OK
13   Applying admin.0001_initial... OK
14   Applying contenttypes.0002_remove_content_type_name... OK
15   Applying auth.0002_alter_permission_name_max_length... OK
16   Applying auth.0003_alter_user_email_max_length... OK
17   Applying auth.0004_alter_user_username_opts... OK
18   Applying auth.0005_alter_user_last_login_null... OK
19   Applying auth.0006_require_contenttypes_0002... OK
20   Applying sessions.0001_initial... OK

  在默認的情況下Django的數據庫是通過Model的方式去操作的(這也是我愛Django的一點。),也就是在程序中不會直接面對數據庫和數據表,而是先創建好Model,然后通過對Model的操作達到操作數據庫的目的。這樣做日后可以很方便的更換數據庫。(總感覺哪里有點不對,日后就換?)

使用數據庫大概分為以下幾步:

  1. 在models.py中定義需要使用的類(繼承自models.Model)
  2. 詳細的設置每一個類中的變量,即數據表的每一個字段
  3. 使用python3 manage.py makemigrations創建數據庫和Django的中介文件。
  4. 使用python3 manage.py migrate 同步更新數據庫的內容。
  5. 操作python定義的類就相當于操作數據庫了。

如同my_blog這個名字的意思一樣,在這里我們需要有一個儲存博文的數據表。

  最初的時候models.py文件的內容就是這些。

from django.db import models# Create your models here.

修改之后內容如下:

from django.db import models
from django.utils import timezone
# Create your models here.class Post(models.Model):title = models.CharField(max_length = 200,verbose_name = '標題')slug = models.CharField(max_length = 200,verbose_name = '作者')body = models.TextField(verbose_name = '內容')pub_date = models.DateTimeField(default = timezone.now,verbose_name = '發表時間')class Meta:verbose_name="文章內容"                # 后臺表的名稱verbose_name_plural = "文章內容"ordering = ['-pub_date']    # 排序def __str__(self):return self.title    # 在 Admin界面顯示的內容

verbose_name 自己試一下應該可以知道是將原來的名字給換了一下,換成中文。

在設計好表之后,執行makemigrations和migrate操作,然后創建一個超級用戶,

python3 manage.py createsuperuser

登陸進去添加五篇文章。

  

  數據庫有了文章以后,我們就要讀取這些資料然后在首頁將其顯示出來,在這里簡單的介紹一下MTV和MVC結構。 ? ? ? ? ? ? ?? models.py主要負責定義要存取的數據模型,以Python的class 類定義,在后端Django會自動把這個類中的設置對應到數據庫系統當中去,不管是使用的是何種數據庫。如何將這些數據取出來或者時存進去的邏輯則是在View中,下面我們編寫mainsite/views.py文件。

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post# Create your views here.def homepage(request):posts = Post.objects.all()post_list = list()for count,post in enumerate(posts):post_list.append('No.{}:'.format(str(count)) + str(post) + "<br>")return HttpResponse(post_list)

  如果項目比較大的話,為了方便組織url我們需要在mainsite文件夾下新建一個urls.py文件。然后添加內容如下:

from django.conf.urls import url
from . import viewsurlpatterns = [url(r'^$',views.homepage,name = 'homepage'),
]

  它使用正則表達式的匹配方式(不懂的話學習一下正則表達式,非常常用),后面跟著使用那個view的路徑,最后面的name = ××× 是用于在html文件中跳轉頁面之用。

然后在myblog下的urls.py中include這個文件。修改myblog/urls.py如下:

from django.conf.urls import include, url
from django.contrib import adminurlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'',include('miansite.urls',namespace = "mainsite")),
]

  然后進入主頁面(http://127.0.0.1:8000/)可以看到如下:

?

?為什么只有題目呢? 我們可以查看models.py 其中最后一行 self.title。

我們可以修改views.py文件從而讓頁面變得更加的美觀。

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post# Create your views here.def homepage(request):posts = Post.objects.all()post_list = list()for count,post in enumerate(posts):post_list.append('No.{}:'.format(str(count)) + str(post) + "<hr>")post_list.append("<small>" + str(post.body) + "</small><br><br>")return HttpResponse(post_list)

?

?

?  差不多一個簡單的網頁已經出來了,下面說一下工作邏輯,用戶提交請求,頁面服務器(如Apache),區分是靜態文件還是其他,靜態文件直接返回內容,其他的話找到setting文件,發現ROOT_URLCONF,然后從中找到相應的url對應的視圖,然后視圖進行邏輯處理,需要和數據庫進行交互的話進行交互,然后將內容放到相應的模板當中。返回給用戶。(可能說的有問題,歡迎指正!)





?

  在前面我們的html編碼都在views.py文件當中,實際開發的時候是不需要這樣做的,將html和后臺分開這樣才能最大效率,最易維護。如果將其分開的話主要工作為下面幾步:

  1. 在setting.py中設置template文件夾的位置。
  2. 在urls.py中創建網址和views.py的對應關系。
  3. 創建html文件,做好排版并安排數據要在頁面顯示的位置。
  4. 在views.py中取得數據,以render函數把數據送到指定的模板文件當中。

修改setting文件中的某些內容如下。

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

templates是在項目的根目錄下(BASE_DIR),然后在templates下創建一個index.html文件,內容如下:

<!DOCTYPE html>
<html><head><meta charset = 'utf-8'><title>歡迎光臨我的博客</title></head><body><h1>歡迎光臨我的博客</h1><hr>{{posts}}<hr><h3>現在時刻:{{now}}</h3></body>
</html>

相應的views.py的編碼如下:

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
from datetime import datetime
# Create your views here.def homepage(request):posts = Post.objects.all()now = datetime.now()post_list = list()return render(request,'index.html',{'posts':posts,'now':now})

效果如下,當然這樣瞎扯淡是不行的。

我們修改index.html文件如下:

<!DOCTYPE html>
<html><head><meta charset = 'utf-8'><title>歡迎光臨我的博客</title></head><body><h1>歡迎光臨我的博客</h1><hr>{% for post in posts %}<p style = 'font-family:微軟雅黑;font-size:16pt;font-weigth:bold;'>{{post.title}}</p><p style = 'font-family:微軟雅黑;font-size:10pt;letter-spacing:1pt;'>{{post.body}}</p>{% endfor %}<hr><h3>現在時刻:{{now}}</h3></body>
</html>

效果如下:

很顯然,沒有人會直接將全部內容放到首頁,將index.html改為如下:

<!DOCTYPE html>
<html><head><meta charset = 'utf-8'><title>歡迎光臨我的博客</title></head><body><h1>歡迎光臨我的博客</h1><hr>{% for post in posts %}<p style = 'font-family:微軟雅黑;font-size:16pt;font-weigth:bold;'><a href = "{url 'mainsite:post' post.id}">{{post.title}}</a></p>{% endfor %}<hr><h3>現在時刻:{{now}}</h3></body>
</html>

上面的鏈接一行待會解釋。

?

效果如下:

然后開始添加點擊鏈接之后的邏輯處理:

def post(request,post_id):try:post_id = int(post_id)post = Post.objects.get(id = post_id)return render(request,'post.html',{'post':post})except:return redirect('/')

怎樣才知道是用這個view呢?下面開始修改 url.在mainsite下的urls.py文件中添加內容如下:

url(r'post/(?P<post_id>\d+)/$',views.post,name = 'post'),#這里的name 就是用于在html 文件中進行跳轉的標記。

然后效果如下:

  添加post.html如下:

<!DOCTYPE html>
<html><head><meta charset = 'utf-8'><title>歡迎光臨我的博客</title></head><body><h1>{{post.title}}</h1><hr><p style = 'font-family:微軟雅黑;font-size:12pt;letter-spacing:2pt;'>{{ post.body }}</p><hr><h3><a href = "{% url 'mainsite:homepage' %}">回首頁</a></h3></body>
</html>

?   可以看到index.html和post.html有許多相同的地方,而且對于一個正式的網站往往需要固定的頁首和頁尾。

  一個正式的網站往往每一頁都需要一些固定的元素用以強調網站的風格。以本堂課的網站為例,到目前為止需要的.html文件如下:

  .html文件關系說明,? base.html include header.html和footer.html?????????????????? index.html 和 post.html extends base.html 。

  創建base.html文件寫入以下內容:

<!DOCTYPE html>
<html><head><meta charset = 'utf-8'><title>{% block title %} {% endblock %}</title></head><body>{% include 'header.html' %}{% block headmessage %} {% endblock %}<hr>{% block content %} {% endblock %}<hr>{% include 'footer.html' %}</body>
</html> 

下面添加或修改.html如下

index.html

{% extends 'base.html' %}
<!-- 繼承自base.html -->
{% block title %}歡迎光臨我的博客{% endblock %}
{% block headmessage %}<h3 style = 'font-family:楷體;'>本站文章列表</h3>
{% endblock %}
{% block content %}{% for post in posts %}<p style = 'font-family:微軟雅黑;font-size:14pt;font-weigth:bold;'><a href = "{% url 'mainsite:post' post.id %}">{{post.title}}</a></p>{% endfor %}
{% endblock %}

?

post.html

{% extends 'base.html' %}
{% block title %} {{ post.title }} - 文學天地 {% endblock %}
{% block headmessage %}<h3 style = 'font-family:微軟雅黑;'>{{ post.title }}</h3><a style = 'font-family:微軟雅黑;' href = "{% url 'mainsite:homepage' %}">回首頁</a>
{% endblock %}
{% block content %}<p style = 'font-family:微軟雅黑;font-size:12pt;letter-spacing:2pt;'>{{ post.body }}</p>
{% endblock %}

footer.html


{% if now %}<p style = 'font-family:微軟雅黑;'>現在時刻:{{ now }}</p>
{% else %}<p style = 'font-family:微軟雅黑;'>本站內容取自互聯網,如有侵權請來信通知下架。</p>
{% endif %}

header.html

<h1 style = 'font-family:微軟雅黑;'>歡迎觀臨    文學天地</h1>

設計這些東西的時候,你一定感覺到很煩,為什么不寫好一個css文件然后引用呢?? 下面我們開始說這一類 ”靜態文件的處理方法“。

我們采用bootstrap去寫。采用CDN

    <!-- Latest compiled and minified CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"><!-- Optional theme --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"><!-- Latest compiled and minified JavaScript --><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

將base.html修改為下面

<!DOCTYPE html>
<html><!-- Latest compiled and minified CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"><!-- Optional theme --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"><!-- Latest compiled and minified JavaScript --><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script><head><meta charset = 'utf-8'><title>{% block title %} {% endblock %}</title></head><body><div class = 'container-fluid'>{% include 'header.html' %}<div class = 'panel panel-default'><div class = 'panel-heading'>{% block headmessage %} {% endblock %}</div><div class = 'panel-body'>{% block content %} {% endblock %}</div><div class = 'panel-footer'>{% include 'footer.html' %}</div></body>
</html> 

然后此時運行起來效果如下:

漂亮了 好幾個檔次。

接著我們引入Bootstrap中Grid概念,通過row和col的設置做出來一般博客網站的側邊連同樣也是在base.html中修改。只修改body的內容

?

<div class = 'container-fluid'>{% include 'header.html' %}<div class = 'row'><div class = 'col-sm-2 col-md-2'><div class = 'panel panel-default'><div class = 'panel-heading'><h3>MENU</h3></div><div class = 'panel-body'><div class = 'list-group'><a href = "{% url 'mainsite:homepage' %}" class = 'list-group-item'>Home</a><a href = 'http://tar.so/news' class = 'list-group-item'>時事新聞</a><a href = 'http://drho.tw/news' class = 'list-group-item'>電視新聞</a></div><script type = 'text/javascript' src = 'http://feedjit.com/serve/?vv=1515&amp;tft=3&amp;dd=0&amp;wid=&amp;pid=0&amp;proid=0&amp;bc=FFFFFF&amp;tc=000000&amp;;ww=190&amp;wne=6&amp;srefs=0'></script><noscript><a href='http://feedjit.com/'>Live Traffic Stats<a></noscript></div></div></div><div class = 'col-sm-8 col-md-8'><div class = 'panel panel-default'><div class = 'panel-heading'>{% block headmessage %} {% endblock %}</div><div class = 'panel-body'>{% block content %} {% endblock %}</div><div class = 'panel-footer'>{% include 'footer.html' %}</div></div></div></div></div> 

?

轉載于:https://www.cnblogs.com/A-FM/p/6964903.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring @Configuration和FactoryBean

考慮使用FactoryBean通過Spring配置文件定義緩存&#xff1a; <cache:annotation-driven /><context:component-scan base-packageorg.bk.samples.cachexml></context:component-scan><bean idcacheManager classorg.springframework.cache.support.Simpl…

cookie解決 未登錄加入購物車 第一次訪問彈出新手引導頁面

瀏覽器攜帶cookie到服務器, 點擊加入購物車-->后臺檢查-->是否登錄(有沒有sessionid) 沒有登錄--->secookie()返回給瀏覽器,把傳遞過來的商品id, 屬性(多個屬性逗號拼接),數量存起來,(序列號成字符串_不同屬性用下劃線拼接) 轉載于:https://www.cnblogs.com/bj-tony/p…

REST + Spring Security會話問題

REST &#xff0c; 會話 ..等待。 REST應用程序中沒有會話&#xff0c;對嗎&#xff1f; 好吧&#xff0c;那是真的。 如果我們可以避免會議&#xff0c;我們應該這樣做。 REST是無狀態的 。 有關無狀態性的主要問題是身份驗證。 在通常的Web應用程序中&#xff0c;我們習慣于在…

程序猿果真有前端后端client嗎

前端 后端 client DBA OP 程序猿有分這么細的嗎?入行時候有區別. 殊途同歸 吾道一以貫之, 假設作為程序猿不能領悟一貫, 則永遠不清楚.轉載于:https://www.cnblogs.com/blfbuaa/p/6970139.html

HarmonyOS硬件創新合作伙伴,【HarmonyOS】HarmonyOS智能硬件開發學習指南 - HDC2020

2020年9月10日&#xff0c;華為HarmonyOS 2.0版本正式官宣&#xff01;這一次&#xff0c;借助 HarmonyOS 全場景分布式系統和設備生態&#xff0c;將定義全新的硬件、交互和服務體驗&#xff0c;打開煥然一新的全場景世界&#xff0c;不愧是HarmonyOS&#xff01; 那HarmonyOS…

處于RUNNABLE狀態的Java線程未真正運行

最近&#xff0c;我在Java應用程序服務器安裝上進行了分析/調整&#xff0c;以識別瓶頸并修復它們。 在此過程中&#xff08;調整&#xff09;&#xff0c;最常見的操作是在系統加載時檢索許多線程轉儲。 請記住&#xff0c;重載&#xff08;在某些情況下&#xff09;可能會產生…

2.3 關系完整性

關系模型的完整性規則是對關系的某種約束條件。 也就是說關系的值隨著時間變化時應該滿足一些約束條件。 &#xff08;這些約束條件實際上是現實世界的要求。任何關系在任何時刻都要滿足這些語義約束&#xff09; 關系模型中有三類完整性約束&#xff1a; 實體完整性 &#xff…

Android 顏色大全color.xml

使用方法&#xff1a; 將color.xml文件拷到res/values目錄下后我們只需要R.xml文件名稱.name名稱就可以調用了(例如:R.color.red) <?xml version"1.0" encoding"utf-8"?><resources> <color name"white">#FFFFFF</color&…

鴻蒙系統華為論壇,2020中國汽車論壇上 華為三大鴻蒙車載OS系統

在今天的2020中國汽車論壇上&#xff0c;華為公布了三大鴻蒙車載OS系統&#xff0c;同時還宣布已經有大量合作伙伴基于鴻蒙OS進行開發。根據智能汽車解決方案BU總裁王軍所說&#xff0c;這三大鴻蒙OS分別是——鴻蒙座艙操作系統HOS、智能駕駛操作系統AOS和智能車控操作系統VOS&…

只讀ViewObject和聲明性SQL模式

介紹 聲明式SQL模式被認為是基于實體的視圖對象的最有價值的優點之一。 在此模式下&#xff0c;根據UI中顯示的屬性在運行時生成VO的SQL。 例如&#xff0c;如果某個頁面包含一個只有兩列EmployeeId和FirstName的表&#xff0c;則查詢將生成為“從Employees中選擇Employee_ID&a…

android 360加固 例子,[原創]利用VirtualApp實現360加固的soHook簡單例子

簡單demo&#xff0c;為拋磚引玉吧&#xff01;360的加固我們先寫一個最簡單的so&#xff0c;帶導出函數。這已經足夠簡單了&#xff0c;界面上打印這個值。運行起來就這樣。簡單的簡直過分。好了&#xff0c;現在我們讓360加固一下。拿下來自己簽名下&#xff0c;安裝好&#…

scrapy架構解析

轉載于:https://www.cnblogs.com/tianboblog/p/6986695.html

華為怎么升級Android11,華為EMUI 11/安卓11升級名單曝光 快來看看你的手機是否支持...

華為EMUI 11/安卓11升級名單曝光 快來看看你的手機是否支持2020年02月10日 16:29作者&#xff1a;NJNR205文章出處&#xff1a;泡泡網原創分享2月10日消息&#xff0c;據外媒報道&#xff0c;華為將于今年3月份的華為開發者大會(HDC)上正式宣布新一代EMUI 11。眾所周知&#xf…

Scala安裝及開發環境搭建

最近想學習下scala&#xff0c;為后面轉大數據做一些沉淀。 1. 首先保證jdk已經成功安裝 2. 去官網下載scala安裝程序 http://www.scala-lang.org/download/all.html 會列出不同的版本. 3. 安裝scala 安裝路徑記得不要有空格否則可能會出現以下這種狀況&#xff0c;還有&am…

簡單利用HTTP中的PUT協議拿下SHELL

第一次用方法拿shell,之前遇到的都是沒有寫入權限的。 站太辣雞&#xff0c;純粹練手&#xff0c;就不打碼了。 此次實戰會用到的HTTP請求方法&#xff1a; OPTIONS&#xff0c;PUT&#xff0c;MOVE/COPPY * 戰前準備 0x01 什么是OPTIONS方法&#xff1f; 此方法用于請求獲得由…

JSF – PrimeFaces和休眠集成項目

本文介紹了如何使用JSF&#xff0c;PrimeFaces和Hibernate開發項目。 下面是一個示例應用程序&#xff1a; 二手技術&#xff1a; JDK 1.6.0_21 Maven的3.0.2 JSF 2.0.3 PrimeFaces 2.2.1 休眠3.6.7 MySQL Java連接器5.1.17 MySQL 5.5.8 Apache Tomcat 7.0 第1步&#xff1…

android q升級名單,華為升級 Android Q 機型名單敲定 陣容龐大

中關村在線消息&#xff1a;在 5 月份的谷歌 I/O 大會上&#xff0c;谷歌公布了一系列支持下一代安卓系統 Android Q 的機型。除了谷歌自家的 pixel 手機之外&#xff0c;還包括 9 款國產手機&#xff0c;其中華為 Mate20 Pro 成為華為首款支持原生安卓的機型。這也讓華為手機的…

mvc UrlHelper

何謂Helper,其實就是在View中為了實現一些靈活功能而寫的方法組。 其實ASP.NET MVC的View是Aspx的頁面,本身可以聲明定義方法,那為什么要有Helper呢&#xff1f; 其實無非是將界面與邏輯分離,而且Asp.net MVC也并不只支持Aspx一種View&#xff08;還可以擴展出來很多&#xff0…

Mockito –使用全局配置的SmartNull在NPE上提供更好的錯誤消息

編寫Mockito參考卡后&#xff0c;我有機會仔細研究了Mockito不太流行但非常有用的功能。 其中一些過于先進或太稀少&#xff0c;無法在refcard中進行描述&#xff0c;因此應簡短說明。 其中之一就是SmartNull。 當前&#xff0c;非空方法返回適用于已知類型&#xff08;例如&am…

java使用js引擎時,關于時間的問題getTime()獲取為NAN的問題

在java中使用js引擎時&#xff0c;想要去獲取兩個時間的相差的天數&#xff0c;查找網上的辦法&#xff1a; var beginMonth parseInt(beginTime.substring(6,8),10);//2016-05-17 18:51:33 var beginYear parseInt(beginTime.substring(1,5),10); var beginDate parseInt(b…