1. 程式人生 > 實用技巧 >10.8CTFHub網站原始碼

10.8CTFHub網站原始碼

<h3>購物車</h3>
<h4>settings配置</h4>
<pre><code class='language-python' lang='python'># 快取redis設定
# 配置Redis為Django快取
CACHES = {
    &quot;default&quot;: {
        &quot;BACKEND&quot;: &quot;django_redis.cache.RedisCache&quot;,
        &quot;LOCATION&quot;
: &quot;redis://127.0.0.1:6379/2&quot;, &quot;OPTIONS&quot;: { &quot;CLIENT_CLASS&quot;: &quot;django_redis.client.DefaultClient&quot;, } } } # 將session快取在Redis中 SESSION_ENGINE = &quot;django.contrib.sessions.backends.cache&quot; SESSION_CACHE_ALIAS =
&quot;default&quot; # session 設定 SESSION_COOKIE_AGE = 60 * 60 * 12 # 12小時 SESSION_SAVE_EVERY_REQUEST = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 關閉瀏覽器,則COOKIE失效 </code></pre> <h5>購物車中redis的操作(雜湊型別)</h5> <pre><code class='language-python' lang='python'># 匯入django-redis from django_redis import get_redis_connection # 連線redis conn = get_redis_connection(&#39;default&#39;) # 獲取單個值(數量) cart_num = conn.hget(key, field) # 設定單個 conn.hset(key, field, value) # 獲取key下面的總數量 cart_sum = conn.hlen(key) # 獲取key下的所有的鍵值對 conn.hgetall(key) # 刪除某一條商品 conn.hdel(key, field)
</code></pre> <h4>django後臺views程式碼</h4> <pre><code class='language-python' lang='python'>class AddCart(View): &quot;&quot;&quot; 新增購物車 &quot;&quot;&quot; def post(self, request): &quot;&quot;&quot; &lt;QueryDict: {&#39;user_id&#39;: [&#39;10&#39;], &#39;goods_id&#39;: [&#39;5&#39;], &#39;cart_num&#39;: [&#39;1&#39;]}&gt; &quot;&quot;&quot; print(request.POST) user_id = request.POST.get(&#39;user_id&#39;) goods_id = request.POST.get(&#39;goods_id&#39;) cart_num = int(request.POST.get(&#39;cart_num&#39;)) try: numbers = int(cart_num) except Exception as e: return HttpResponse(json.dumps({&#39;msg&#39;: &#39;數量值不正確&#39;, &#39;code&#39;: 404})) # 連線redis conn = get_redis_connection(&#39;default&#39;) # 獲取redis中商品的數量 cart_count = conn.hget(user_id, goods_id) print(cart_count) if cart_count: numbers += int(cart_count) conn.hset(user_id, goods_id, numbers) cart_sum = conn.hlen(user_id) return HttpResponse(json.dumps({&#39;msg&#39;: &quot;OK&quot;, &#39;code&#39;: 200, &#39;cart_sum&#39;: cart_sum})) class ShowCartView(View): &quot;&quot;&quot; 獲取購物車內的內容 &quot;&quot;&quot; def get(self, request, user_id): conn = get_redis_connection(&#39;default&#39;) cart_all = conn.hgetall(user_id) print(cart_all) goods_list = [] for k, v in cart_all.items(): goods_id = k.decode(&#39;utf-8&#39;) goods_num = v.decode(&#39;utf-8&#39;) goods = Goods.objects.get(pk=goods_id) goods_list.append({ &#39;goods_name&#39;: goods.goods_name, &#39;goods_price&#39;: str(goods.goods_price), &#39;goods_code&#39;: goods.pk, &#39;goods_number&#39;: goods_num, &#39;goods_sum&#39;: float(goods.goods_price) * int(goods_num) }) goods_sums = 0 for i in goods_list: goods_sums += i.get(&#39;goods_sum&#39;) return HttpResponse(json.dumps({&#39;msg&#39;: &quot;OK&quot;, &#39;code&#39;: 200, &#39;goods_list&#39;: goods_list, &#39;goods_sums&#39;: goods_sums})) class JianView(View): &quot;&quot;&quot; 前端減數量介面 &quot;&quot;&quot; def post(self, request): print(request.POST) user_id = request.POST.get(&#39;user_id&#39;) goods_id = request.POST.get(&#39;goods_id&#39;) cart_num = int(request.POST.get(&#39;cart_num&#39;)) try: numbers = int(cart_num) except Exception as e: return HttpResponse(json.dumps({&#39;msg&#39;: &#39;數量值不正確&#39;, &#39;code&#39;: 404})) # 連線redis conn = get_redis_connection(&#39;default&#39;) # 獲取redis中商品的數量 cart_count = conn.hget(user_id, goods_id) print(cart_count) if cart_count: cart_count = int(cart_count) if cart_count &gt; 1: cart_count -= 1 conn.hset(user_id, goods_id, cart_count) cart_sum = conn.hlen(user_id) return HttpResponse(json.dumps({&#39;msg&#39;: &quot;OK&quot;, &#39;code&#39;: 200, &#39;cart_sum&#39;: cart_sum})) else: return HttpResponse(json.dumps({&#39;msg&#39;: &quot;商品不存在&quot;, &#39;code&#39;: 200})) class JiaView(View): &quot;&quot;&quot; 前端加數量介面 &quot;&quot;&quot; def post(self, request): print(request.POST) user_id = request.POST.get(&#39;user_id&#39;) goods_id = request.POST.get(&#39;goods_id&#39;) # 連線redis conn = get_redis_connection(&#39;default&#39;) # 獲取redis中商品的數量 cart_count = conn.hget(user_id, goods_id) print(cart_count) if cart_count: cart_count = int(cart_count) cart_count += 1 conn.hset(user_id, goods_id, cart_count) cart_sum = conn.hlen(user_id) return HttpResponse(json.dumps({&#39;msg&#39;: &quot;OK&quot;, &#39;code&#39;: 200, &#39;cart_sum&#39;: cart_sum})) else: return HttpResponse(json.dumps({&#39;msg&#39;: &quot;商品不存在&quot;, &#39;code&#39;: 200})) </code></pre> <h4>前端vue程式碼, 展示頁面</h4> <pre><code class='language-vue' lang='vue'>&lt;template&gt; &lt;div&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;編號&lt;/td&gt; &lt;td&gt;名稱&lt;/td&gt; &lt;td&gt;價格&lt;/td&gt; &lt;td&gt;引數&lt;/td&gt; &lt;td&gt;詳情&lt;/td&gt; &lt;td&gt;圖片&lt;/td&gt; &lt;td&gt;分類&lt;/td&gt; &lt;td&gt;操作&lt;/td&gt; &lt;/tr&gt; &lt;tr v-for=&quot;goods in goods_array&quot;&gt; &lt;td&gt;{{goods.id}}&lt;/td&gt; &lt;td&gt; &lt;router-link :to=&quot;{name: &#39;Detail&#39;, params: {&#39;pk&#39;: goods.id}}&quot;&gt;{{goods.goods_name}}&lt;/router-link&gt; &lt;/td&gt; &lt;td&gt;{{goods.goods_price}}&lt;/td&gt; &lt;td&gt;{{goods.parameter}}&lt;/td&gt; &lt;td v-html=&quot;goods.goods_content&quot;&gt;&lt;/td&gt; &lt;td&gt;&lt;img :src=&quot;&#39;http://127.0.0.1:8000&#39; + goods.goods_img&quot; alt=&quot;&quot;&gt;&lt;/td&gt; &lt;td v-for=&quot;c in cate_array&quot; v-if=&quot;c.id == goods.cate&quot;&gt;{{c.cate_name}}&lt;/td&gt; &lt;td&gt; &lt;a href=&quot;#&quot; @click.prevent=&quot;del_goods(goods.id)&quot;&gt;刪除&lt;/a&gt; &lt;router-link :to=&quot;{name: &#39;UpdateGoods&#39;, params: {&#39;pk&#39;: goods.id}}&quot;&gt;修改&lt;/router-link&gt; &lt;a href=&quot;#&quot; @click.prevent=&quot;add_cart(goods.id)&quot;&gt;加入購物車&lt;/a&gt; &lt;router-link :to=&quot;{name: &#39;Cart&#39;}&quot;&gt;去購物車({{cart_sum}})&lt;/router-link&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt; &lt;button @click.prevent=&quot;up_num&quot;&gt;上一頁&lt;/button&gt; &lt;button v-for=&quot;p in page_array&quot; @click.prevent=&quot;get_page_num(p)&quot;&gt;{{p}}&lt;/button&gt; &lt;button @click.prevent=&quot;down_num&quot;&gt;下一頁&lt;/button&gt; &lt;/p&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import axios from &#39;axios&#39; export default { data() { return { goods_array: Array(), // List() [] cate_array: [], page: 1 , page_array: [], current_page: &#39;&#39;, sum_page: &#39;&#39;, user_id: sessionStorage.getItem(&#39;user_id&#39;), // 通過session獲取使用者id cart_sum: &#39;&#39; } }, methods: { get_goods() { //跳轉到當前頁,並根據頁碼,獲取當前頁的商品資訊 axios({ url: &#39;http://127.0.0.1:8000/mdadmin/page_api/&#39; + this.page, method: &#39;get&#39; }).then(res=&gt;{ console.log(res.data) this.goods_array = res.data.goods this.page_array = res.data.page_list this.current_page = res.data.number this.sum_page = res.data.page_nums }) }, get_cate() { // 獲取分類 axios({ url: &#39;http://127.0.0.1:8000/mdadmin/cate_api/&#39;, method: &#39;get&#39; }).then(res=&gt;{ console.log(res.data) this.cate_array = res.data }) }, del_goods(gid) { // 刪除商品 axios({ url: &#39;http://127.0.0.1:8000/mdadmin/goods_detail/&#39; + gid + &#39;/&#39;, method: &#39;delete&#39; }).then(res=&gt;{ console.log(res.data) window.location.reload() }) }, get_page_num(page_num) { // 獲取頁碼,重新給page賦值,並呼叫get_goods() this.page = page_num this.get_goods() }, up_num(){ // 上一頁 if(this.current_page&gt;1 ) { this.page -= 1 this.get_goods() }else if(this.current_page == 1){ this.page = 1 this.get_goods() } }, down_num() { // 下一頁 if(this.current_page &lt; this.sum_page) { this.page += 1 this.get_goods() }else if(this.current_page == this.sum_page){ this.page = this.sum_page this.get_goods() } }, add_cart(goods_id) { let form_data = new FormData() form_data.append(&#39;user_id&#39;, this.user_id) form_data.append(&#39;goods_id&#39;, goods_id) form_data.append(&#39;cart_num&#39;, 1) axios({ url: &#39;http://127.0.0.1:8000/mdadmin/add_cart/&#39;, method: &#39;post&#39;, data: form_data }).then(res=&gt;{ console.log(res.data) this.cart_sum = res.data.cart_sum }) } }, created() { this.get_goods() this.get_cate() if(sessionStorage.getItem(&#39;name&#39;)){ }else{ window.location.href = &#39;/login&#39; } } } &lt;/script&gt; </code></pre> <h4>購物車頁面</h4> <pre><code class='language-vue' lang='vue'>&lt;template&gt; &lt;div&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;商品編號&lt;/td&gt; &lt;td&gt;名稱&lt;/td&gt; &lt;td&gt;價格&lt;/td&gt; &lt;td&gt;數量&lt;/td&gt; &lt;td&gt;總價&lt;/td&gt; &lt;/tr&gt; &lt;tr v-for=&quot;goods in goods_array&quot;&gt; &lt;td&gt;{{goods.goods_code}}&lt;/td&gt; &lt;td&gt;{{goods.goods_name}}&lt;/td&gt; &lt;td&gt;{{goods.goods_price | msg}}&lt;/td&gt; &lt;td&gt; &lt;button @click.prevent=&quot;jian(goods.goods_code)&quot;&gt;-&lt;/button&gt; &lt;input type=&quot;text&quot; :value=&quot;goods.goods_number&quot; style=&quot;width: 20px&quot; id=&quot;input1&quot;&gt; &lt;button @click.prevent=&quot;jia(goods.goods_code)&quot;&gt;+&lt;/button&gt; &lt;/td&gt; &lt;td&gt;{{goods.goods_sum | msg}}&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;總價:&lt;/td&gt; &lt;td&gt;{{goods_sums | msg}}&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import axios from &#39;axios&#39; export default { data(){ return { user_id: sessionStorage.getItem(&#39;user_id&#39;), goods_array: [], goods_sums: &#39;&#39; } }, methods: { get_goods() { axios({ url: &#39;http://127.0.0.1:8000/mdadmin/show_cart/&#39; + this.user_id, method: &#39;get&#39; }).then(res=&gt;{ console.log(res.data) this.goods_array = res.data.goods_list this.goods_sums = res.data.goods_sums }) }, jian(goods_id) { // 減數量 let form_data = new FormData() form_data.append(&#39;user_id&#39;, this.user_id) form_data.append(&#39;goods_id&#39;, goods_id) axios({ url: &#39;http://127.0.0.1:8000/mdadmin/jian/&#39;, method: &#39;post&#39;, data: form_data }).then(res=&gt;{ if(res.data.code == 200){ this.get_goods() } }) }, jia(goods_id) { // 加數量 let form_data = new FormData() form_data.append(&#39;user_id&#39;, this.user_id) form_data.append(&#39;goods_id&#39;, goods_id) axios({ url: &#39;http://127.0.0.1:8000/mdadmin/jia/&#39;, method: &#39;post&#39;, data: form_data }).then(res=&gt;{ if(res.data.code == 200){ this.get_goods() } }) } }, created() { if(sessionStorage.getItem(&#39;user_id&#39;)){ this.get_goods() }else{ window.location.href = &#39;/login&#39; } } } &lt;/script&gt; </code></pre> <p>&nbsp;</p> <p>&nbsp;</p>